Gdb JMP和JMP之间的区别是什么*

Gdb JMP和JMP之间的区别是什么*,gdb,elf,Gdb,Elf,此代码已使用GDB反汇编。它是用于x86目标的32位elf可执行文件。这条线来自PLT部分 0x08048320 <+0>: jmp *0x80497b0 0x08048326 <+6>: push $0x8 0x0804832b <+11>: jmp 0x8048300 0x08048320:jmp*0x80497b0 0x08048326:推送$0x8 0x0804832b:jmp 0x804830

此代码已使用GDB反汇编。它是用于x86目标的32位elf可执行文件。这条线来自PLT部分

    0x08048320 <+0>:    jmp    *0x80497b0
    0x08048326 <+6>:    push   $0x8
    0x0804832b <+11>:   jmp    0x8048300
0x08048320:jmp*0x80497b0
0x08048326:推送$0x8
0x0804832b:jmp 0x8048300
我不理解jmp*(第一条指令)和最后一条指令之间的区别:jmp,没有asterix

我不明白其中的区别

这与以下两者的区别是一样的:

int x = 42;
int p = x;

jmp*0x80497b0
跳转到地址存储在
0x80497b0
的符号。
jmp 0x8048300
跳到
0x8048300


要理解这段代码的作用,请阅读“过程链接表”(或者整个post)。

这与C中指针的概念相同。如果ptr是指针,*ptr指存储在ptr所指地址处的值。 同样地
jmp 0x8048300
表示跳转到内存地址0x8048300。 及
jmp*0x80497b0
表示跳转到存储在内存位置0x80497b0的地址

int *px = &...;
int q = *px;