【发布时间】:2017-01-04 14:21:51
【问题描述】:
我正在编写一些 shellcoding,并在我的 Windows 虚拟机上得到了这个奇怪的结果。这个想法是,从零开始,创造一些价值。在这种情况下,我需要该值等于:0x50505353
(gdb) print /x 0 - 0x38383536 - 0x77777777
$1 = 0x50505353
在 Python、GDB、OSX、Linux 和其他一切中,此操作按预期工作。在 Windows VM 上,当我在 OllyDBG 或 Immunity 上执行 PUSH 时,结果是:0x52535051
所以问题是,为什么?我在这里缺少什么?
这是在 ASM 中完成的操作:
AND EAX,65656565
AND EAX,1A1A1A1A
SUB EAX,38383536
SUB EAX,77777777
PUSH EAX
第一对AND变换EAX = 0x00000000。然后我可以从中减去。需要说明的是,我不能在这个测试中使用 XOR。
【问题讨论】:
-
“ASM 中的减法” 在汇编代码中你在哪里做减法?我在您的问题中没有看到任何地方。
-
这看起来不像是有效的 x86 程序集。你用的是哪个汇编程序?看着你的问题,我仍然看不到任何与汇编语言编程相关的东西。它似乎完全是关于 GDB 中的算术运算。
-
抱歉,Michael,我刚刚更新了问题以添加有关 ASM 部分的更多详细信息。是普通的 x86 程序集。
-
为什么两个
AND操作和两个SUB操作而不是一个?从问题中并不清楚。或者为什么你不能只使用MOV。无论如何,你为什么要在汇编代码中减去36353838而不是38383536? -
是一个 shellcode,由于字符限制,我不能使用 MOV 或 XOR。修复了 ASM 代码的副本。
标签: windows assembly gdb hex shellcode