您的位置:首页 > 其它

win32汇编语言寻址

2012-07-19 10:23 197 查看
汇编的寻址一直都比较让初学者头疼,这两天我在学习汇编语言。写个文章总结一下。

mov [eax],XXXX 间接寻址将xxxx中的数据存入eax指向的地址,传送指令不可以直接操作两个内存中的数

mov @sz ,@sc 当然是错误的

mov @sz ,4 mov @sz ,eax 这是可以的

总之两个内存中的数不可以,其他的指令一样适用 cmp指令 也是这样

立即数不可以间接寻址 mov eax ,[004100xx] 错误的!!! mov eax ,[@sz ] 会被编译成 mov eax ,ptr dword [ 004100xx] 相当于 mov eax ,@sz 不是间接寻址没有达到目的

offset是宏指令 在编译器有编译器处理的

mov eax ,offset @sz 实际上编译之后是 mov eax ,004100xx 立即数寻址

call 指令可以直接适用地址 call 00410xxx 也可以 call [eax +xxx] 间接寻址调用方法

在线程注入时由于代码在编译的时候是按照建议地址装载的(一般就是00401000)所以注入到进程地址的时候地址一定是错误的,所以代码重定位后就可以访问。

call @F

@@:

pop ebx

sub ebx ,offset @B ebx是实际的装载地址 pop ebx 的地址 offset @B 是pop ebx 编译时候的地址 相减后就是偏移了

这个时候ebx中保存的就是偏移量

所有的全局变量寻址由于在编译期的地址是错误的所以加上偏移量xxx后才可以访问到。

比如 sxdate dd

mov eax ,[xxx+sxdate ] 这个时候访问的就是sxdate 的值了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: