我有一个简单的16位汇编如下所示:ASM琴弦代码的破坏
push bx
StrVar db "My string!",0
push ax
.. other code..
我试图用NASM编译它,但我有一个问题..如果我的字符串尾随零不是16位的倍数(假设包含19个字节零),字符串后面的asm被错误对齐并被搞乱(我把它看成反汇编器)。
这是为什么?我注意到操作码并不总是16位,那么反汇编程序如何决定操作码应该遵循什么边界?
此外......如何防止这种情况发生?我应该每次每个角色数我的琴弦吗?
谢谢,没有注意到。无论如何,它应该工作,如果我控制程序的流程,如果反汇编程序显示垃圾,因为它被我的中间程序字符串弄糊涂了吗? –
是的,如果你确保你的数据永远不会被执行,把它放到代码段中并不一定是个大问题。大多数反汇编代码都会花费很多工作来确定代码是什么以及什么不是代码 - 在给定入口点的情况下,他们通常会跟踪指令以查找诸如“jmp”,“call”和“ret”之类的内容,以帮助确定执行什么和不执行什么(FWIW,至少在我的经验中,IDA Pro在这方面的表现要好于大多数人)。 –