汇编代码出错,检查方法

来源:互联网 发布:淘宝物流助手在哪里 编辑:程序博客网 时间:2024/05/21 22:29

汇编学习了一段时间,今天试着练习下,以前都没用汇编写过什么东西,今天就今天写代码遇到的问题总结下:

下面这些都是一些很低级的问题,都是针对刚开始写汇编代码的人(masm32)

1.关于汇编语法错误查错思路:

首先第一点,我用的是Radasm出错时出错位置不一定就是真正出错的地方,可能是前面或后面的语句

第二点,要注意定义的函数要放在代码段里,并且要放在end xxx之前,当出现链接错误,未定义的符号时,如果是自己定义的函数首先要检查其位置是否正确,然后再看定义时函数名是否和调用时相同,然后是参数的个数,另外不要忘记每个函数最后面都要加ret指令否则会崩的

第三点,关于比例因子寻址的,要记住比例因子只能在1,2,4,8这几个数字选,否则都会出错

第四点,对于双操作数的指令来说,最多只能有一个是从内存中得操作数,主要是在写.if   .while这些时一定要注意只能有一个为内存中的数

第五点,对于函数中一个参数是指针类型的(指向结构体),如果要用到此结构体中的成员,一定要先mov  reg,point  然后再  【reg】.field取其字段的值,如果直接【point】.field,这样是得不到结构体中字段的值的,这样得到只是栈中某个单元的内容

第六点,汇编编程时最容易出现的问题就是寄存器的值被覆盖了,如果用到寄存器一定要保证不要把前面的值给覆盖了(如果寄存器中的值有用),在用的时候首先 push reg 然后在再次需要之前的寄存器值得时候用pop reg 另外一定要注意堆栈平衡也就是 push pop 必须成对出现,另外一定要注意不能在分支之前用push 分支之后用pop 因为很可能分支中的pop没有执行,这样也会造成堆栈破坏。

第七点,要注意的就是对于双操作数指令前后操作数的类型也好匹配,这也是容易出错的地方

第八点,尽量不要用eax传多个参数,因为很可能在传参的时候eax的值破坏了,如 invoke fun, addr xx【eax】.y, addr xx【eax】.x

目前就写这些,这些是今天写代码遇到的问题,写下做个笔记,以后在有问题会继续补充

原创粉丝点击