我是靠谱客的博主 着急小伙,这篇文章主要介绍汇编语言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内嵌汇编内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部