Assembly 英特尔64位,奇怪的RSP行为
我在Windows中使用IDA调试64位二进制文件时遇到了一个问题。通常,推压后,RSP值应减去8。但偶尔,我从IDA那里看到RSP只扣除2,然后再扣除8 涉及的代码是Assembly 英特尔64位,奇怪的RSP行为,assembly,x86-64,callstack,ida,Assembly,X86 64,Callstack,Ida,我在Windows中使用IDA调试64位二进制文件时遇到了一个问题。通常,推压后,RSP值应减去8。但偶尔,我从IDA那里看到RSP只扣除2,然后再扣除8 涉及的代码是 push rax push rbx push rsi push rdi 我对x64环境非常陌生,因此有人能解释这种行为吗?您可能被十六进制搞混了。按8点计数 0 8 10 18 20 28 30 你是不是在看这个然后想10-8==2?因为它是0x10-0x8==0x8,所以它不应该是2,除非代码使用16位推送(这
push rax
push rbx
push rsi
push rdi
我对x64环境非常陌生,因此有人能解释这种行为吗?您可能被十六进制搞混了。按8点计数
0 8 10 18 20 28 30
你是不是在看这个然后想
10-8==2
?因为它是0x10-0x8==0x8
,所以它不应该是2,除非代码使用16位推送(这是不正常的)。Show the instruction and before-after.downvted:不包括详细信息(例如在特定指令上具有before/after值的调试器的实际文本转储)。@Jester:不,包的所有部分:)我偶尔会发现自己犯了一两秒钟这个错误,足以记住它曾经发生过。不过,我在键入评论时花了几分钟才想到这一点:P