作 者: FlyToTheSpace
说明:第一步设置符号表路径.比如 E:/WINDOWS/system32/Symbols/
第二步指定系统动态库,比如user32.dll
第三步指定系统库函数名比如ValidateHwnd.
如果调用成功的话,返回值就为未导出的库函数地址.
例外说明.使用ollydbg设置好了符号表路径,好像是没有效果.
只有把符号文件放到系统目录/system32/symbols/里面才能加载.
class ProcedureAddrRetrieve
{
public:
ProcedureAddrRetrieve(TCHAR *PdbSearchPath,DWORD _Options = NULL);
~ProcedureAddrRetrieve();
BOOL LoadSymbol(TCHAR *DllName);
BOOL EnumSymbol(TCHAR *pSearchMask = NULL);
DWORD64 RetrieveAddr(TCHAR *_szProcedureName);
protected:
private:
BOOL GetFileSize( const TCHAR* pFileName, DWORD& FileSize );
static BOOL CALLBACK EnumSymbolsCallback( SYMBOL_INFO* pSymInfo, ULONG SymbolSize, PVOID UserContext );
DWORD64 ModBase64;
char szProcedureName[MAX_PATH];
DWORD64 Address;
};
void test();
#include <windows.h>
#include <tchar.h>
#include <io.h>
#include <stdio.h>
#include <dbghelp.h>
#include <stdio.h>
#include "lib.h"
#pragma comment( lib, "dbghelp.lib" )
void test()
{
ProcedureAddrRetrieve par("E://WINDOWS//system32//Symbols//");
par.LoadSymbol("User32.dll");
par.RetrieveAddr("ValidateHwnd");
}
ProcedureAddrRetrieve::ProcedureAddrRetrieve(TCHAR *PdbSearchPath,DWORD _Options
说明:第一步设置符号表路径.比如 E:/WINDOWS/system32/Symbols/
第二步指定系统动态库,比如user32.dll
第三步指定系统库函数名比如ValidateHwnd.
如果调用成功的话,返回值就为未导出的库函数地址.
例外说明.使用ollydbg设置好了符号表路径,好像是没有效果.
只有把符号文件放到系统目录/system32/symbols/里面才能加载.
class ProcedureAddrRetrieve
{
public:
ProcedureAddrRetrieve(TCHAR *PdbSearchPath,DWORD _Options = NULL);
~ProcedureAddrRetrieve();
BOOL LoadSymbol(TCHAR *DllName);
BOOL EnumSymbol(TCHAR *pSearchMask = NULL);
DWORD64 RetrieveAddr(TCHAR *_szProcedureName);
protected:
private:
BOOL GetFileSize( const TCHAR* pFileName, DWORD& FileSize );
static BOOL CALLBACK EnumSymbolsCallback( SYMBOL_INFO* pSymInfo, ULONG SymbolSize, PVOID UserContext );
DWORD64 ModBase64;
char szProcedureName[MAX_PATH];
DWORD64 Address;
};
void test();
#include <windows.h>
#include <tchar.h>
#include <io.h>
#include <stdio.h>
#include <dbghelp.h>
#include <stdio.h>
#include "lib.h"
#pragma comment( lib, "dbghelp.lib" )
void test()
{
ProcedureAddrRetrieve par("E://WINDOWS//system32//Symbols//");
par.LoadSymbol("User32.dll");
par.RetrieveAddr("ValidateHwnd");
}
ProcedureAddrRetrieve::ProcedureAddrRetrieve(TCHAR *PdbSearchPath,DWORD _Options