汇编语言高级过程与多模块编程详解
1. INVOKE 语句运行时错误
INVOKE 语句有时会在汇编时正常,但在运行时出错。例如下面的 INVOKE 语句:
INVOKE Sub2, 1000h
该语句会使 Sub2 过程将 1000h 作为指针值接收,并尝试引用内存位置 1000h。但内存位置 1000h 可能不在程序的数据段内,这很可能会导致一般性保护错误。
2. WriteStackFrame 过程
Irvine32 库中有一个名为 WriteStackFrame 的实用过程,它可以显示当前过程的栈帧内容,包括过程的栈参数、返回地址、局部变量和保存的寄存器。其原型如下:
WriteStackFrame PROTO,
numParam:DWORD, ; 传递的参数数量
numLocalVal: DWORD, ; DWord 局部变量的数量
numSavedReg: DWORD ; 保存的寄存器数量
以下是一个演示 WriteStackFrame 的程序片段:
main PROC
mov eax, 0EAEAEAEAh
mov ebx, 0EBEBEBEBh
INVOKE myProc, 1111h, 2222h ; 传递两个整数参数
exit
main ENDP
myProc PROC USES eax ebx,
x: DWORD, y: DWORD
LOCAL a
超级会员免费看
订阅专栏 解锁全文
1864

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



