Attack Lab phase4/5指令农场gadget对应位置c3字节含义问询
结论
单字节0xc3就是x86-64架构下retq(64位模式返回指令,也可简写为ret)的标准操作码,你提到的地址0x401a50处的0xc3确实对应ret指令。
对应字节映射说明
你给出的getval_440函数机器码对应关系如下:
0000000000401a4c <getval_440>: 401a4c: b8 48 89 c7 c3 mov $0xc3c78948,%eax 401a51: c3 retq
其中第一条指令mov $0xc3c78948,%eax的操作码0xb8占1字节,后续4字节为小端序存储的立即数,各地址对应字节为:
0x401a4c:0xb8→movl到%eax的操作码0x401a4d:0x48→ 立即数第1字节0x401a4e:0x89→ 立即数第2字节0x401a4f:0xc7→ 立即数第3字节0x401a50:0xc3→ 立即数第4字节
与教程版本的差异说明
网上教程对应的Attack Lab版本中,getval_440的立即数最高位为0x90(NOP指令编码),从0x401a4d开始解析指令时,字节序列为0x48 0x89 0xc7 0x90 0xc3,前3字节就是movq %rax, %rdi的编码,后续跟NOP和RET,可作为合法gadget。
你当前版本中0x401a50为0xc3,从0x401a4d开始解析的字节序列为0x48 0x89 0xc7 0xc3,前3字节依然是合法的movq %rax, %rdi编码,后续直接跟RET,属于更简洁的可用gadget。
内容的提问来源于stack exchange,提问作者user202004
相关产品推荐
相关产品推荐

