zoukankan      html  css  js  c++  java
  • pwn学习日记Day14 《程序员的自我修养》读书笔记

    目标文件:计算机科学中存放目标代码的计算机文件,包含着机器代码,代码在运行时使用的数据,调试信息等,是从源代码文件产生程序文件这一过程的中间产物。
    目标代码(objectcode)指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码或接近于机器语言的代码组成。目标文件(objectfile)即存放目标代码的计算机文件,它常被称作二进制文件(binaries)。
    目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据,如重定位信息,如用于链接或调试的程序符号(变量和函数的名字),此外还包括其他调试信息。目标文件是从源代码文件产生程序文件这一过程的中间产物,链接器正是通过把目标文件链接在一起来生成可执行文件或库文件。目标文件中唯一的要素是机器代码,例如,用于嵌入式系统的目标文件可能仅仅含有机器代码。
    寻址方式的区别:

    • 近址寻址或远址寻址
    • 绝对寻址或相对寻址
    • 寻址长度为8位、16位、32位或64位
      但是对于32位x86平台下的elf文件的重定位入口所修正的指令寻址方式只有两种:
    • 绝对近址32位寻址
    • 相对近址32位寻址

    ABI:application binary interface
    API:application programming interface
    C为例子决定二进制文件是否兼容:

    • 内置类型(int)的大小和在存储器中的放置方式(大小端、文件对齐)
    • 组合类型(数组、struct、union)的存储方式和内存分布
    • 外部符号与用户定义的符号之间的命名方式和解析方式(func函数在C语言目标文件中是否被解析成外部符号_func)
    • 函数调用方式(参数入栈顺序、返回值如何保持)
    • 堆栈的分布方式(参数和局部变量在堆栈中的位置、参数的传递方法)
    • 寄存器使用约定(函数调用时哪些寄存器可以修改,哪些须要保存)
  • 相关阅读:
    Java并发编程(二)线程任务的中断(interrupt)
    Java并发编程(一) 两种实现多线程的方法(Thread,Runnable)
    青蛙跳台阶(Fibonacci数列)
    旋转数组的最小值
    用两个栈实现队列
    重建二叉树
    二维数组中的查找
    Lab 3-1
    Lab 1-4
    Lab 1-3
  • 原文地址:https://www.cnblogs.com/luoleqi/p/10839830.html
Copyright © 2011-2022 走看看