extern
"C"
__declspec
(
dllexport
)
void
CBMENUENTRY(CBTYPE cbType, PLUG_CB_MENUENTRY* info);
void
CBMENUENTRY(CBTYPE cbType, PLUG_CB_MENUENTRY* info) {
SELECTIONDATA sel;
if
(GuiSelectionGet(GUI_DISASSEMBLY, &sel)){
char
*moduleName1 =
new
char
[128];
char
*moduleName2 =
new
char
[128];
char
*out =
new
char
[128];
int
outlen;
DbgGetModuleAt(sel.start, moduleName1);
duint baseAdress = DbgModBaseFromName(moduleName1);
BASIC_INSTRUCTION_INFO asminfo;
for
(duint ii = sel.start; ii <= sel.end; ii += asminfo.size) {
outlen = 0;
memset
(out, 0, 128);
DbgDisasmFastAt(ii, &asminfo);
duint dstAdress[] = { ii, asminfo.value.value , asminfo.memory.value};
for
(
int
nn = 0; nn < 3; nn++) {
if
(dstAdress[nn] == 0)
continue
;
DbgGetModuleAt(dstAdress[nn], moduleName2);
if
(
strcmp
(moduleName1, moduleName2) == 0) {
outlen =
sprintf
(out + outlen,
"[0x%x];"
, dstAdress[nn] - baseAdress);
}
}
DbgSetCommentAt(ii, out);
}
delete
[] moduleName1;
delete
[] moduleName2;
delete
[] out;
}
}