汇编语言高级过程与多模块编程详解
1. INVOKE、ADDR、PROC 和 PROTO 的使用
在汇编语言编程中, INVOKE 、 ADDR 、 PROC 和 PROTO 这些指令和伪指令是非常重要的。不过在使用过程中,也存在一些容易出错的地方。
1.1 传递错误类型的指针
当使用 INVOKE 时,汇编器不会验证传递给过程的指针类型。例如, Swap 过程期望接收两个双字指针,但如果不小心传递了字节指针,程序仍会汇编和运行,但在解引用 ESI 和 EDI 时,会交换 32 位值。示例代码如下:
.data
ByteArray BYTE 10h,20h,30h,40h,50h,60h,70h,80h
.code
INVOKE Swap, ADDR [ByteArray + 0], ADDR [ByteArray + 1]
1.2 传递立即数
如果一个过程有引用参数,不要传递立即数作为参数。例如下面的 Sub2 过程:
Sub2 PROC, dataPtr:PTR WORD
mov esi,dataPtr
mov WORD PTR [esi],0
ret
Sub2 ENDP
超级会员免费看
订阅专栏 解锁全文
1864

被折叠的 条评论
为什么被折叠?



