- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要访问 WinMain
参数使用汇编,但我似乎无法这样做,尽管我应该知道它们在堆栈中的位置(DWORD 偏移 0 到 16,以及在操作之前推送 EBP 时为 0 到 20)。下面是显示 lpszCmdline
的示例包含程序命令行的字符串,但它似乎总是包含 0,因此没有显示任何内容。如果我尝试在汇编代码中使用其他参数,则似乎不存在有效的字符串指针和/或程序崩溃,如预期的那样。
;[esp+20]==nCmdShow
;[esp+16]==lpszCmdLine
;[esp+12]==0 in win32
;[esp+8]==hInst
;[esp+4]==EIP
;[esp+0]==EBP
push ebp
mov ebp,esp
mov eax,[ebp+16]
push dword 0x00001030 ;UINT uType
push eax ;LPCTSTR lpCaption
push eax ;LPCTSTR lpText
push dword 0 ;HWND hWnd
call dword[MessageBoxA@USER32.DLL]
pop ebp
GetCommandLine
我可以获得指向命令行字符串的有效指针,它会显示出来。
call dword[GetCommandLineA@KERNEL32.DLL]
push dword 0x00001030 ;UINT uType
push eax ;LPCTSTR lpCaption
push eax ;LPCTSTR lpText
push dword 0 ;HWND hWnd
call dword[MessageBoxA@USER32.DLL]
lpszCmdLine
的有效指针就像 GetCommandLine
结果,到另一个WinMain
参数? 如果我无法从堆栈中获取命令行指针,那么我可能无法获取其他参数,例如
nCmdShow
, 对于其他重要的初始化。
WinMain
有什么影响,比如更多的堆栈参数吗?),但基本上它只是一个 Windows 自动调用其入口点的程序以上将是它包含的程序的两个不同选项。
最佳答案
#include <Windows.h>
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
__asm {
mov eax, [ebp+16]
push 0
push eax
push eax
push 0
call dword ptr ds:[MessageBoxA]
}
return ERROR_SUCCESS;
}
关于winapi - 汇编器 : Getting Win32's WinMain on-stack parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5951081/
WinMain() 实际上是如何调用的?我记得专业黑客使用的一个函数,它以(某物)开头,看起来像 __startupWinMain()。 问题是,我有一个 Win32 EXE(使用 /SUBSYSTE
WinMain 的第三个参数以未处理的字符串形式提供命令行。虽然这对于允许您处理通配符的扩展和其他问题可能很有用,但是否有可能在 Win32 API 中的某个地方潜伏着获得通常的 C argc、arg
所以我有一个 .cpp 文件,其中包含例如函数:drawLine()、drawSquare() 和 main()。在 main() 中,我想调用使用 WinApi 创建窗口的函数(从其他文件),然后调
我刚开始学习使用 C++ 进行 Windows 编程。我有一个疯狂的印象,即 win32 编程是基于调用 Windows 函数并向它们发送参数以及从它们发送参数。就像,当你想创建窗口时,你调用一些处理
我的问题是参数只检索每个参数中的第一个字母,为此我不知道为什么..有人可以详细说明吗? #include #include int WINAPI WinMain(HINSTANCE hInstan
这个问题在这里已经有了答案: what does the function returns with in C program , in case if there is no return sta
总而言之,我有一个关于 WinMain 的问题。在VS2010中,_tWinMain的返回值为“(int) msg.wParam”。我不明白为什么它会返回 wParam。 wParam 是什么?我
我正在努力让我的代码尽可能完美,并且我已经清除了所有错误和(其他)警告。我只剩下这两个: Warning C28253 Inconsistent annotation for 'WinMain':
我刚开始使用 C++,但遇到了无法修复的错误。 这是我到目前为止的所有代码(甚至无法让 hello world 工作): #include "stdafx.h" #include int WINAP
这可能是有史以来最简单的win32程序.. #include int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR cmdLine,
我有几个非常简单的问题。我在网上搜索了它们,但找到了不同的答案,所以我只想知道该遵循哪个。 所以,首先,我相信 WinMain 不是 C 或 C++ 标准,而只是由 Microsoft 添加来确定何时
你能给我解释一下通常写在 WinMain() 函数末尾的这条语句的意义吗: return (int) msg.wParam; 我习惯于以 return 0; 结束我的控制台应用程序,这对 Win
假设我在一个项目中构建了一个名为 App1 的应用程序,其中包含很多类。我决定要构建另一个名为 App2 的项目,并且我想使用那些相同的类,因此我决定将 App1 转换为一个 lib 文件。我必须删除
我正在 Windows 上开发应用程序,但我也想支持其他平台(我编写的大部分代码都是平台无关的)。不管怎样,我想为了开发的缘故我想让事情简单化(也许我在这种方法上太天真了)所以我的 main.cpp
有什么方法可以在类中隐藏 WinMain() 函数吗?谢谢。 最佳答案 不,没有。一个更好的问题是“你为什么想要”?在 Java 或 C# 中,main 函数是静态类成员,不是因为它更好或更干净,而是
我在想,是否可以使用 win32 程序的入口点 - WinMain - 作为类方法?例如; class cApp { public: cApp(); ~cApp(); cGuiM
我正在学习 C++ 和针对 Windows API 的编程。我的第一个“Hello Windows API”程序只显示一个 MessageBox()。但是,我有一些问题,我正在阅读的书没有解释。 首先
为什么这个程序可以正确显示消息框,但没有设置错误级别? int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTAN
在MFC中,wWinMain定义在appmodul.cpp中。据我所知,该文件内置于 mfc90ud.dll 中。但是,当我运行我的应用程序时,调用堆栈显示 MyApplication.exe!wWi
我删除了 IDE 生成的 _tmain() 方法,因为我发现在添加我的 WinMain 条目后有两个入口点没有意义。是的,这是我的第一个 C++ 应用程序,我是新手,但请保持友好。 这就是我得到的:
我是一名优秀的程序员,十分优秀!