📄 bhrama.c
字号:
/*
* Bhrama Client-Server Interface 0.3
* (c)1999 CindyG
*
* bhrama.c: Interface implementation
*/
#define WIN32_LEAN_AND_MEAN
#define STRICT
#include <windows.h>
#include "bhrama_internal.h"
// --------------------------------------------------------------------------
// FUNCTION: bhrama_getserverhandle()
// DESCRIPT:
// --------------------------------------------------------------------------
HWND bhrama_getserverhandle()
{
/* todo: start server if not found? */
return FindWindow(NULL, BHRAMA_SERVER_ID);
}
// --------------------------------------------------------------------------
// FUNCTION: bhrama_ipc()
// DESCRIPT:
// --------------------------------------------------------------------------
BOOL bhrama_ipc(DWORD pid, DWORD function, PBHRAMA_IPC_STRUCT bhrama)
{
HWND pdserver = bhrama_getserverhandle();
if (pdserver)
{
COPYDATASTRUCT bhrama_cd;
bhrama->version = BHRAMA_VERSION;
bhrama->pid = pid;
bhrama_cd.dwData = function;
bhrama_cd.cbData = sizeof(BHRAMA_IPC_STRUCT);
bhrama_cd.lpData = (PVOID)bhrama;
SendMessage(pdserver, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&bhrama_cd);
return TRUE;
}
return FALSE;
}
// --------------------------------------------------------------------------
// FUNCTION: bhrama_query()
// DESCRIPT:
// --------------------------------------------------------------------------
BOOL bhrama_query(DWORD pid)
{
BHRAMA_IPC_STRUCT bhrama;
ZeroMemory(&bhrama, sizeof(bhrama));
// todo: no specs available yet
return bhrama_ipc(pid, BHRAMA_QUERY_PID, &bhrama);
}
// --------------------------------------------------------------------------
// FUNCTION: bhrama_dump()
// DESCRIPT:
// --------------------------------------------------------------------------
BOOL bhrama_dump(DWORD pid, DWORD eip, DWORD delay, DWORD import, DWORD options)
{
BHRAMA_IPC_STRUCT bhrama;
ZeroMemory(&bhrama, sizeof(bhrama));
bhrama.dump.eip = eip;
bhrama.dump.delay = delay;
bhrama.dump.internal_predump = (options & BHRAMA_PREDUMP_AUTODUMP) ? 1 : 0;
bhrama.dump.delayed_predump = (delay != 0) ? 1 : 0;
bhrama.dump.ignore_faults = (options & BHRAMA_TRACE_RANGECHECK) ? 1 : 0;
bhrama.dump.no_eip_confirm = (options & BHRAMA_TRACE_AUTOEIP) ? 0 : 1;
bhrama.dump.no_layer_confirm = (options & BHRAMA_TRACE_AUTOLAYER) ? 0 : 1;
bhrama.dump.trace_api = (options & BHRAMA_TRACE_TRACEAPI) ? 1 : 0;
bhrama.dump.recompute_object_size = (options & BHRAMA_RESTORE_AUTOOBJ) ? 1 : 0;
bhrama.dump.optimize_pe = (options & BHRAMA_RESTORE_SHRINKPE) ? 1 : 0;
bhrama.dump.rebuild_relocations = (options & BHRAMA_RESTORE_RELOC) ? 1 : 0;
bhrama.dump.rebuild_header = (options & BHRAMA_RESTORE_HEADER) ? 1 : 0;
bhrama.dump.rebuild_import = (BYTE)import;
bhrama.dump.force_raw_mode = (options & BHRAMA_LOADER_RAWMODE) ? 1 : 0;
bhrama.dump.merge_code = (options & BHRAMA_LOADER_MERGECODE) ? 1 : 0;
bhrama.dump.check_header = (options & BHRAMA_LOADER_CHECKHEADER) ? 1 : 0;
bhrama.dump.show_disassembly = (options & BHRAMA_MISC_SHOWDISASM) ? 1 : 0;
return bhrama_ipc(pid, BHRAMA_DUMP_PID, &bhrama);
}
// --------------------------------------------------------------------------
// FUNCTION: bhrama_dumppart()
// DESCRIPT:
// --------------------------------------------------------------------------
BOOL bhrama_dumppart(DWORD pid, DWORD start, DWORD length)
{
BHRAMA_IPC_STRUCT bhrama;
ZeroMemory(&bhrama, sizeof(bhrama));
bhrama.dumppart.start = start;
bhrama.dumppart.length = length;
return bhrama_ipc(pid, BHRAMA_DUMP_PID_PART, &bhrama);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -