此代码已与GDB一起反汇编。它是一个x64可执行的32位x86目标。这一行来自PLT部分。
0x08048320 <+0>: jmp *0x80497b0
0x08048326 <+6>: push $0x8
0x0804832b <+11>: jmp 0x8048300
我不明白jmp *(第一条指令)与最后一条之间的区别:jmp,没有星号......
答案 0 :(得分:3)
我不明白差异
与以下区别的区别相同:
int x = 42;
int p = x;
和
int *px = &...;
int q = *px;
jmp *0x80497b0
跳转到地址存储在0x80497b0
的符号。 jmp 0x8048300
跳转到0x8048300
。
要了解此代码的作用,请阅读“程序链接表”(或整个帖子)here。
答案 1 :(得分:0)
与C中的指针概念相同。如果ptr是指针,则* ptr指的是存储在ptr指向的地址处的值。
相似地
jmp 0x8048300
表示跳转到内存地址0x8048300。
和
jmp *0x80497b0
表示跳转到存储在内存位置0x80497b0的地址。