脚本宝典收集整理的这篇文章主要介绍了记录几个小技巧和函数,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
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;
}
以上是脚本宝典为你收集整理的记录几个小技巧和函数全部内容,希望文章能够帮你解决记录几个小技巧和函数所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。