- 论坛徽章:
- 3
|
原帖由 mik 于 2007-4-8 17:09 发表于 4楼
汇编器(assembler)只是生成一个需重定位的object文件。这个目标文件需经过链接器(Linker)与相应的库链接起来生成一个可执行的文件。
assembler 产生的代码是从 0 开始编址。经过 Lineker 重定位后生成的 ...
恩,我再补充一点点——
给LZ三段代码
- /**1.c***/
- extern int d;
- int func(int i,int j)
- {
- int I,J;
- I=i;
- J=j;
- return I+J+d;
- }
- int func2(int i,int j)
- {
- return func(i,j)+1;
- }
复制代码
- /**2.c**/
- int d=7;
- int func2(int,int);
- int main()
- {
- func2(1,2);
- return 0;
- }
复制代码
然后
- gcc -c 1.c
- gcc -c 2.c
- gcc 1.o 2.o
复制代码
然后反编译
objdump -D 1.o >1
objdump -D 2.o >2
objdump -D a.out >a
然后仔细比较1,2,a三个文件中的汇编码和机器码。 |
|