为什么要将 EAX、ESP 和指令 sub、push 和 pop 汇编成 ASCII 字符?
例如:
'%' 表示“和 EAX”
'-' 表示“子 EAX”
'P' 表示“推 EAX”
'X' 表示“流行 EAX”
'T' 表示“推 ESP”
'\' 表示“流行 ESP”
如果我没看错问题:因为它们是操作码,恰好与 ASCII 表中的那些字符相同。
查看:http ://ref.x86asm.net/coder32.html 并转到 AND eAX,您会注意到在左侧的深灰色列中,它表示该助记符的操作码是 25(十六进制)。
如果您然后查看 ASCII 表(例如http://www.asciitable.com/),并查看 25 hex 是什么字符,它将是%
.
关于为什么提出这个问题的进一步猜测:在某些情况下,可能需要能够提供可键入 ASCII 的程序。第一个可能类似于 EICAR 防病毒测试字符串:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
其中,如果输入记事本,保存为COM文件(如eicar.com),然后运行,它会打印EICAR-STANDARD-ANTIVIRUS-TEST-FILE!
。这使得粘贴到程序、电子邮件等中变得相当简单,以确保防病毒软件正常工作。
另一个用途是为基于缓冲区溢出的攻击编写 shellcode,同样是为了便于键入和转义。如果您想了解更多详细信息,我会咨询http://projectshellcode.com/?q=node/12之类的内容以了解此过程的概述。
这是因为它们共享编码。