记录几个小技巧和函数
2021/9/29 6:11:00
本文主要是介绍记录几个小技巧和函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.获取本程序所在目录地址的函数:
GetCurrentDirectoryA()
char Add[MAX_PATH]; GetCurrentDirectoryA(MAX_PATH, Add);
如果想要得到路径中文件的绝对地址,可以用strcat拼接
//比如要获得main.dll的地址 char AddPlus[]="\\main.dll"; strcat(Add,AddPlus); cout<<"拼接好的地址为:"<<Add<<endl;
如果字符串是用string容器进行接收的,可以用string中的c_str()方法转换成char型字符数组
c_str():生成一个const char*指针,指向以空字符终止的数组。
string str="hello world!"; char getStr[12]; strcpy(getStr, str.c_str());
2.远线程注入了dll后,dll干完了事情后想删除自身,如果用FreeLibrary()直接释放,在 FreeLibrary之后,该DLL的地址空间就不再可用了,但这时 EIP 指针仍然会指向 FreeLibrary 的下面一句,于是程序崩溃。
还好,Win32 提供了另外的一个 API——FreeLibraryAndExitThread,这个函数能够在销毁 DLL 之后直接调用 ExitThread。
#include <Windows.h> HMODULE g_hDll = NULL; DWORD WINAPI UnloadProc(PVOID param) { MessageBox(NULL, TEXT("Press ok to unload me."), TEXT("MsgBox in dll"), MB_OK); FreeLibraryAndExitThread(g_hDll, 0); // oops! return 0; } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, PVOID lpvReserved) { if (DLL_PROCESS_ATTACH == fdwReason) { g_hDll = (HMODULE)hinstDLL; HANDLE hThread = CreateThread(NULL, 0, UnloadProc, NULL, 0, NULL); CloseHandle(hThread); } return TRUE; }
这篇关于记录几个小技巧和函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide