- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 gcc inline 在程序集中直接调用 MessageBoxA()。但是我需要通过两种方式来做到这一点:首先是使用动态寻址,使用 LoadLibrary() 和 GetProcAddress() - 我找到了一个关于这个的教程,试图遵循它。但我也有兴趣直接调用 MessageBoxA 的地址,在我的 Windows SP3 英语中是 0x7e4507ea。
我正在尝试执行这段代码:
/*
* eax holds return value
* ebx will hold function addresses
* ecx will hold string pointers
* edx will hold NULL
*
*/
int main(int argc, char **argv)
{
asm(" xor %eax, %eax \t\n\
xor %ebx, %ebx \t\n\
xor %ecx, %ecx \t\n\
xor %edx, %edx \t\n\
push $0x0 \t\n\
push $0x44444444 \t\n\
push $0x44444444 \t\n\
pop %ecx \t\n\
mov %dl,0x3(%ecx) \t\n\
mov $0x7e4507ea, %ebx \t\n\
push %edx \t\n\
push %ecx \t\n\
push %ecx \t\n\
push %edx \t\n\
mov $0x8, %ax \t\n\
call *%ebx \t\n\
");
}
我不确定在 Windows 中是否可以这样做,直接调用地址,而不指定库(在本例中为 user32.dll)。我知道在 Linux 中调用 write() 系统调用很简单,但在 Windows 中我还不太熟悉..
我希望看到一个带有“DDDDDDDD”的消息框。有人可以帮我吗?感谢任何帮助,还有教程链接!
非常感谢
最佳答案
先用C写,编译后查看汇编列表,看看编译器生成了什么。这是最简单的学习方法。如果您看到不理解的指令,请在英特尔指令集引用 PDF 中查找。
关于c - Windows AT&T 程序集中的 MessageBoxA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3671091/
我正在尝试使用 gcc inline 在程序集中直接调用 MessageBoxA()。但是我需要通过两种方式来做到这一点:首先是使用动态寻址,使用 LoadLibrary() 和 GetProcAdd
我正在尝试将 MessageBoxA 函数与 MS Detours 3.0 Hook ,但是当我尝试它时,我的程序崩溃了。我不确定是什么导致程序崩溃。当我运行测试程序并按下 shift 时,会出现消息
此示例在 python 3.3.2 文档中: http://docs.python.org/3/library/ctypes.html?highlight=ctypes#ctypes 但是:当我在解释
我正在用 C# 编写一个报警程序,它在指定的时间显示一个带有用户指定消息的系统模式对话框。但是,我似乎找不到 C# 等价物 MessageBoxA(HWND_DESKTOP, msg, "Alarm"
这个问题在这里已经有了答案: How to convert std::string to LPCSTR? (9 个回答) 关闭 9 年前。 我在 C++ 中试过这个: std::string tes
我是一名优秀的程序员,十分优秀!