Assembly 汇编jmp内存表达式
我正在为一个项目做准备,我遇到了以下几行Assembly 汇编jmp内存表达式,assembly,gdb,disassembly,Assembly,Gdb,Disassembly,我正在为一个项目做准备,我遇到了以下几行 jmp *0x80498c0(,%eax,4) 跳转指令到底想做什么? 这是在gdb环境中 谢谢请参见“引用内存:部分” 32位寻址如下所示(AT&T格式) immed32(基指针、索引指针、索引刻度) 这被转换为地址处的值,由 immed32+basepointer+indexpointer*indexscale 例如,要处理一个[i],其中“a”是一个整数数组,您可以 (%eax,%ebx,4) 这样eax寄存器保存a的基指针,ebx具有索引i。这
jmp *0x80498c0(,%eax,4)
跳转指令到底想做什么?
这是在gdb环境中
谢谢请参见“引用内存:部分”32位寻址如下所示(AT&T格式) immed32(基指针、索引指针、索引刻度) 这被转换为地址处的值,由 immed32+basepointer+indexpointer*indexscale 例如,要处理一个[i],其中“a”是一个整数数组,您可以 (%eax,%ebx,4)
这样eax寄存器保存a的基指针,ebx具有索引i。这是一个间接跳转 该指令计算位置
[0x80498c0+eax*4]
,加载存储在那里的值并跳转到此位置存储的地址
这类代码在跳转表中非常常见,通常在C开关
指令或等效指令之后
编辑:
*
特定于AT&T语法。它是一个用于取消引用的助记符,就像在C中一样。如果大括号中的部分丢失,则需要使用它-jmp 0x80498c0
将直接跳转到此地址,其中jmp*0x80498c0
跳转到存储在0x80498c0中的指针的目标。您能在这里总结一下您链接到的页面中适用于OP问题的部分吗?我现在有点理解了,但立即数之前的星号(*)是什么意思?