这个问题折磨了好几天

2019-07-19 20:18:49 +08:00
 co3site
#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
	STARTUPINFO si = {0};
	si.cb = sizeof(STARTUPINFO);

	PROCESS_INFORMATION pi;

	TCHAR cmdline[] = TEXT("C:\\Program Files\\Internet Explorer\\iexplore.exe");

        //以挂起形式创建进程
	BOOL status = CreateProcess(NULL,  cmdline,  NULL,  NULL, FASLE,  CREATE_SUSPENDED, NULL, NULL, &si, &pi);

	if (status)
	{
		//获取创建进程的主线程 context
		CONTEXT context = {0};
		context.ContextFlags = CONTEXT_FULL;
		GetThreadContext(pi.hThread, &context);

		//获取程序入口点( ImageBase + OEP )
		cout << "Entry Point(OA):" << hex << context.Eax << endl;

		//从 PEB 中获取 ImageBase	
		CHAR* baseAddress = (CHAR*)(context.Ebx + 8);
		CHAR buffer[8] = { 0 };
		ReadProcessMemory(pi.hProcess, baseAddress, buffer, 4, NULL);
		cout << "ImageBase:" << hex << buffer << endl;

		//恢复进程(主线程)
		ResumeThread(pi.hThread);

		//关闭句柄
		CloseHandle(pi.hThread);
		CloseHandle(pi.hProcess);
	}
	return 0;
}

如上,是以挂起的形式创建的进程,但就是获取不到相应的挂起主线程的 CONTEXT 结构数据,看了好多博客都是可以这样获取的呀,难道是我最近太衰了吗,连编译器都要与我为难一番,(′д` )…彡…彡
测试环境:WIN10 + VS2019

1836 次点击
所在节点    C
5 条回复
co3site
2019-07-19 20:36:27 +08:00
@livid 请问我这个账号什么时候才能够恢复正常,就因为之前说了一件人尽皆知的新闻吗?现在真正想发帖询问都不行了
xiofee
2019-07-19 22:12:24 +08:00
```cpp
cout << "ImageBase:" << hex << *(uint32_t*)(buffer) << endl;
```
co3site
2019-07-19 22:21:54 +08:00
@xiofee 不是这个问题,是整个 CONTEXT 拿不到数据
xuddk727
2019-07-30 10:13:21 +08:00
win10 的话多半是权限问题,可 getlasterror 查看原因
v2byy
2019-08-12 17:05:40 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/584532

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX