我是靠谱客的博主 着急小伙,最近开发中收集的这篇文章主要介绍汇编语言9内嵌汇编,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C语言 内嵌汇编

void main()
{
char ps[20] = "aaaaaaaaaan";
char *p1 =ps;
//用汇编语句改写下面2句代码
ps[3]='b';
printf(ps);
}

 

//等价的写法1:

void main()
{
char ps[20] = "aaaaaaaaaan";
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] = "aaaaaaaaaan";
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] = "aaaaaaaaaan";
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);
}
}

 

转载于:https://www.cnblogs.com/mayingkun/p/4633655.html

最后

以上就是着急小伙为你收集整理的汇编语言9内嵌汇编的全部内容,希望文章能够帮你解决汇编语言9内嵌汇编所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部