汇编语言9内嵌汇编
2015-07-09 16:57
155 查看
C语言 内嵌汇编
//等价的写法1:
//等价的写法2:
void main() { char ps[20] = "aaaaaaaaaa\n"; char *p1 =ps; //用汇编语句改写下面2句代码 ps[3]='b'; printf(ps); }
//等价的写法1:
void main() { char ps[20] = "aaaaaaaaaa\n"; char *p1 =ps; HMODULE hmod =GetModuleHandle("msvcr90.DLL"); if (hmod) { PVOID pfun =GetProcAddress(hmod, "printf"); if (pfun) { __asm { //&p1才是存放指针p1的内存, [p1]表示取去p1的值。 //有点绕吧, 这里 p1是指针的实体, 不是要理解为它的值 mov eax, dword ptr [p1] //[eax] 表示取eax 存放的内容. 现在eax为p1的值 mov byte ptr [eax+3],0x62 push dword ptr[p1] call pfun mov eax ,1 add esp,4 } } FreeLibrary(hmod); } }
//等价的写法2:
void main() { char ps[20] = "aaaaaaaaaa\n"; char *p1 =ps; HMODULE hmod =GetModuleHandle("msvcr90.DLL"); if (hmod) { PVOID pfun =GetProcAddress(hmod, "printf"); if (pfun) { __asm { //[ps+3]表示取第3个元素,虽然C语言里面数组名就是指针,汇编里面不能直接写为等价 mov byte ptr [ps+3],0x62 push dword ptr[p1] call pfun mov eax ,1 pop ebx //相当于esp+=4 } } FreeLibrary(hmod); } } //写法3: void main() { char ps[20] = "aaaaaaaaaa\n"; char *p1 =ps; HMODULE hmod =GetModuleHandle("msvcr90.DLL"); if (hmod) { PVOID pfun =GetProcAddress(hmod, "printf"); if (pfun) { __asm { mov ecx,10 mov ebx, 0 //把ps全部替换成bbbbbbbb s: mov byte ptr [ps+ebx],0x62 inc ebx loop s push dword ptr[p1] call pfun mov eax ,1 pop ebx } } FreeLibrary(hmod); } }
相关文章推荐
- 几种字符串的转变
- 线程 NSThread 多线程 简单翻译
- Codeforces Round #311 (Div. 2) C(技巧) *D(二分图染色)
- 推送消息的时候判断是在app里面还是点击消息进去的 (配合Jpush极光)
- swift创建函数
- 波
- Homebrew--Mac OS X 的包管理器
- java-String中的 intern()
- Android中ImageView.ScaleType属性值
- easyui 给文本框 checkbox赋值问题
- Unsupervised Feature Learning and Deep Learning(UFLDL) Exercise 总结
- 二分图的最大匹配、完美匹配和匈牙利算法
- WPF入门教程系列十一——依赖属性(一)
- c++ 函数返回指针 及用法
- [Shell] shell 脚本循环恢复的问题
- 转:jQuery验证控件jquery.validate.js使用说明+中文API
- 打造你的开发神器——Android Studio与插件合体
- MAVEN常用命令
- Android 4.4前后版本读取图库图片和拍照完美解决方案
- Servlet 实质