//测试...
char* cap="你好世界";
char* msg="这是个测试,你知道吗?";
long hwnd=0;
long flag=0;
HINSTANCE lib=0;
FARPROC proc=0;
LPCSTR dll="user32";
LPCSTR sproc="MessageBoxA";
lib= LoadLibraryA(dll);
proc=GetProcAddress( lib, sproc);
printf("%x/n%x/n",lib,proc);
asm volatile(
"push %0/n/t"
"push %1/n/t"
"push %2/n/t"
"push %3/n/t"
"call *%4/n/t"
:
:"r"(hwnd),"r"(cap),"r"(msg),"r"(flag),"r"(proc)
:"ebx"
);
//也可以分开写
// asm volatile(
// "push %0/n/t"
// "push %1/n/t"
// :
// :"r"(hwnd),"r"(cap)
// :"ebx"
// );
// asm volatile(
// "push %0/n/t"
// "push %1/n/t"
// "call *%2/n/t"
// :
// :"r"(msg),"r"(flag),"r"(proc)
// :"ebx"
// );
FreeLibrary((HMODULE)lib);
使用ASM调用DLL示例
本文介绍了一个使用C语言和内联汇编的方式调用Windows DLL中的函数的具体示例。示例中通过LoadLibraryA和GetProcAddress获取了user32.dll中的MessageBoxA函数地址,并通过内联汇编进行了调用,展示了如何在C程序中直接利用汇编指令进行系统调用。
1076

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



