我在理解从 C 源文件编译的重定位表的条目时遇到了一些问题。我的程序如下:
//a.c
extern int shared;
int main(){
int a = 100;
swap(&a, &shared);
a = 200;
shared = 1;
swap(&a, &shared);
}
//b.c
int shared = 1;
void swap(int* a, int* b) {
if (a != b)
*b ^= *a ^= *b, *a ^= *b;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下命令gcc -c -fno-stack-protector a.c b.c和ld a.o b.o -e main -o ab. 然后我objdump -r a.o检查它的重定位表。
RELOCATION RECORDS FOR [.text]:
OFFSET TYPE VALUE
0000000000000014 R_X86_64_32 shared
0000000000000021 R_X86_64_PC32 …Run Code Online (Sandbox Code Playgroud) 我只看了一下我从这个C程序得到的一个非常简单的SPARC程序集输出:
int addition_func(int a, int b)
{
return(a+b);
}
void main()
{
int a = 20;
int b = 19;
int res;
res = addition_func(a, b);
}
Run Code Online (Sandbox Code Playgroud)
反汇编.text:
00000000 <addition_func>:
0: 81 c3 e0 08 retl
4: 90 02 00 09 add %o0, %o1, %o0
00000008 <main>:
8: 90 10 20 14 mov 0x14, %o0
c: 92 10 20 13 mov 0x13, %o1
10: 82 13 c0 00 mov %o7, %g1
14: 40 00 00 00 call 14 <main+0xc>
18: …Run Code Online (Sandbox Code Playgroud)