记录几个小技巧和函数

发布时间:2022-07-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了记录几个小技巧和函数脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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,请注明来意。
标签: