Assembly 添加负十六进制数
我有一个小问题: 是否有任何Assembly 添加负十六进制数,assembly,x86,hex,Assembly,X86,Hex,我有一个小问题: 是否有任何X的值满足此等式,并且可以放入32位寄存器 7A40B660+X=004023A0 我需要它来调用004023A0地址(我控制ESI寄存器): 所有的数字都是十六进制数。首先,让我们简单地讨论一下问题: 7A40B660+X=004023A0 让我们把X放在它自己的位置上: X=004023A0-7A40B660 在32位十六进制中,FFFFFFFF+1=0。把零加到一个数字上不会改变它的值。让我们在右边加零: X=FFFFFF+1+004023A0-7A40B66
X
的值满足此等式,并且可以放入32位寄存器
7A40B660+X=004023A0
我需要它来调用004023A0地址(我控制ESI寄存器):
所有的数字都是十六进制数。首先,让我们简单地讨论一下问题: 7A40B660+X=004023A0 让我们把X放在它自己的位置上: X=004023A0-7A40B660 在32位十六进制中,
FFFFFFFF+1=0
。把零加到一个数字上不会改变它的值。让我们在右边加零:
X=FFFFFF+1+004023A0-7A40B660
重新安排:
X=(FFFFFF-7A40B660)+1+004023A0
现在很容易解决。答案是85FF6D40。这取决于所使用的表示形式。例如,这些是32位数字吗?嗨。它不起作用。我这样做是为了解决ASM问题:我控制ESI,我希望add指令的结果是004023A0。再次感谢!你说的“没用”是什么意思?你到底做了什么?发生了什么?您是否将
ESI
设置为包含值85FF6D40
的地址?EAX中的值是多少?是的,我做了。显然,EAX具有以下值:7A40B660
(mov EAX,7A40B660h)。因此,EAX=7A40B660
和ESI的指针=85FF6D40
,但在外接程序EAX之后存储的值是BAAEB5E5
@Alberto,地址处的值必须是85FF6D40,而不一定是地址本身。
.code:00401095 mov eax, 7A40B660h
.code:0040109A add eax, [esi] ; Add
.code:0040109C call eax