相关疑难解决方法(0)

目标文件重定位表中条目的含义

我在理解从 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.cld 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 linker x86-64 relocation

6
推荐指数
1
解决办法
1297
查看次数

反汇编的gcc输出似乎执行"调用0"而不是"调用函数偏移",但工作正常

我只看了一下我从这个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)

assembly sparc disassembly

5
推荐指数
1
解决办法
883
查看次数

标签 统计

assembly ×1

c ×1

disassembly ×1

linker ×1

relocation ×1

sparc ×1

x86-64 ×1