我需要为以下说明找到无空值的替代品,以便我可以将以下代码放入 shellcode。
我需要转换为无空值的第一条指令是:
mov ebx, str ; the string containing /dev/zero
字符串 str 在我的 .data 部分中定义。
第二个是:
mov eax,0x5a
谢谢!
最佳答案
假设你想学习的是汇编代码是如何组成的,什么类型的指令选择最终会出现在具有特定属性的汇编代码中,然后(在 x86/x64 上)执行以下操作:
熟悉这些并在心理上将它们分为两组 - 那些与您的预期属性匹配的组(例如,不包含“x”字符......或任何其他特定的字符),以及那些不匹配的组。如果它们存在,您需要从代码中消除的第二类。
objdump
的反汇编输出将包含二进制指令(操作码)以及指令名称(助记符),即您将确切地看到选择的操作码格式。您现在可以根据上面的 1. 检查其中是否有任何操作码来自第二组。 从上面返回编译中间体,找到
csource.s
程序集,进行更改,重新组装/重新链接,测试。 由于 5. 绝对是家庭作业,类似于创建一个等效于给定
for()
循环的 C while()
循环,不要指望那里有太多帮助。指令集引用手册和使用(反)汇编器的实验是您在这里需要的。此外,如果您正在学习,请参加有关编译器如何工作/如何编写编译器的类(class)——它们确实涵盖了编译器如何完成汇编指令选择,我可以想象这是一个有趣/具有挑战性的术语项目,例如编写一个编译器,其输出保证包含字符“
?
”(0x3f
)但绝不包含“!
”(0x21
)。你明白了。关于shell - 更多无空Shellcode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6854156/