Assembly 检查汇编指令是如何存储的

Assembly 检查汇编指令是如何存储的,assembly,gdb,Assembly,Gdb,我希望在特定地址更新组装说明。为此,我分解了一个C函数,以查看汇编指令是如何存储的,具体看下面的指令: 0x088... jmp 0x88465002 (gdb) x /2b 0x088 0x088... <main+20> 0xeb 0x15 0x088。。。jmp 0x88465002 (gdb)x/2b 0x088 0x088。。。0xeb 0x15 我发现指令是以字节编码的,例如JMP被编码为0xEB。但是,为什么JMP的位置存储为0x15?这是因

我希望在特定地址更新组装说明。为此,我分解了一个C函数,以查看汇编指令是如何存储的,具体看下面的指令:

0x088...     jmp     0x88465002

(gdb) x /2b 0x088
0x088...  <main+20>  0xeb  0x15
0x088。。。jmp 0x88465002
(gdb)x/2b 0x088
0x088。。。0xeb 0x15
我发现指令是以字节编码的,例如
JMP
被编码为
0xEB
。但是,为什么
JMP
的位置存储为
0x15
?这是因为我们在堆栈中跳转
0x15
字节(即
0x15
是偏移量)


谢谢--

0xEB
是x86上短相对跳转的操作码。Short表示8位上的有符号位移。yes
0x15
是相对于当前指令计数器值(即本指令的下一条指令的地址)的位移,0x15=21字节。如果您获得汇编程序/英特尔参考手册,则所有内容都将被清除。。。“如果没有帮助,请阅读手册。”请注意,汇编指令在程序映像中的地址仅与机器指令相对应。还要注意的是,机器指令可能被编码为多个字节(甚至不包括任何操作数,很明显你是这样做的)。请阅读一本关于汇编语言的书,手头有参考手册。