2011年9月27日星期二

ODbgScript源碼學習(二十一)


void initLogWindow() {
//初始化記錄窗口
   if (ollylang->wndLog.bar.nbar==0) {//如果語言工具條為空

ollylang->wndLog.bar.name[0]="Address"; //顯示地址字符串
    ollylang->wndLog.bar.defdx[0]=9; //索引
    ollylang->wndLog.bar.mode[0]=BAR_NOSORT; //模式為非分類

ollylang->wndLog.bar.name[1]="Message"; //消息
    ollylang->wndLog.bar.defdx[1]=130; //索引
    ollylang->wndLog.bar.mode[1]=BAR_NOSORT; //費分離

ollylang->wndLog.bar.nbar=2; //設置為2
    ollylang->wndLog.mode=TABLE_COPYMENU|TABLE_APPMENU|TABLE_SAVEPOS|TABLE_ONTOP|TABLE_HILMENU; //模式為標籤複製菜單|添加菜單|保存指針|非頂部|HIL菜單
    ollylang->wndLog.drawfunc=wndlog_get_text; //重畫函數為獲取文本

}
Quicktablewindow(&ollylang->wndLog,15,2,wndlogclass,"Script Log Window");
//快速表窗口
if (ollylang->wndLog.hw) { //如果句柄存在
HICON ico=LoadIcon(hinstModule(),MAKEINTRESOURCE(IDI_ICON_LOG));//加載圖標
SendMessage(ollylang->wndLog.hw,WM_SETICON,false,(long)ico);//發送設置圖標消息
// CloseHandle(ico);//關閉
}
}

int wndlog_sort_function(const t_sortheader *p1,const t_sortheader *p2,const int sort) {//分類函數
t_wndlog_data *lline1 = (t_wndlog_data *)p1; //行為分類頭數據指針
t_wndlog_data *lline2 = (t_wndlog_data *)p2;//行為分類頭數據指針

if (lline1->line > lline2->line)//如果行1大於行2
return 1; //則返回1
else if (lline1->line < lline2->line)
return -1;//否則返回-1
return 0; //默認返回0
}

int wndlog_get_text(char *s, char *mask, int *select, t_sortheader *ph, int column) {//獲取文本

unsigned int ret;
t_wndlog_data *lline = (t_wndlog_data *)ph;

t_dump *cpuasm; //定義轉儲類型變量
int p;

cpuasm = (t_dump *)Plugingetvalue(VAL_CPUDASM); //獲取插件值

    ret = sprintf(s,"");

switch (column) {
case 0: //打印不同類型
ret = sprintf(s, "%X", lline->eip);
break;
case 1:
ret = sprintf(s, "%s", lline->message);
break;

}

if (!ret) ret=strlen(s); //如果打印長度不為0,賦值s的長度后返回

return ret;
}

void clearLogLines() {

if (!ollylang->tLogLines.empty()) {//如果數據不為空
Deletesorteddatarange(&(ollylang->wndLog.data),0,0xffffffff);//釋放記錄窗口數據0-0xffffffff
ollylang->tLogLines.clear(); //清除行
if (ollylang->wndLog.hw!=NULL) InvalidateRect(ollylang->wndLog.hw, NULL, FALSE); //重畫記錄窗口
}
}

int add2log(char* message) { //添加記錄

t_dump *cpuasm;
t_wndlog_data lline={0};
cpuasm = (t_dump *)Plugingetvalue(VAL_CPUDASM);

lline.line = ollylang->tLogLines.size()+1; //行為語言行大小加1
lline.eip = cpuasm->sel0;
lline.size = 1;
strncpy(lline.message,message,LOG_MSG_LEN-1);

ollylang->tLogLines.push_back(lline); //入棧

Addsorteddata(&(ollylang->wndLog.data),&(ollylang->tLogLines.back()));//添加數據

if (ollylang->wndLog.hw!=NULL) {
Selectandscroll(&ollylang->wndLog,lline.line-1,2);
InvalidateRect(ollylang->wndLog.hw, NULL, FALSE);
}
return 1;
}

int add2log(string & message) {

return add2log((char*)message.c_str());

}

int add2logMasked(char* message,char* mask) {
return 1;
}

没有评论:

发表评论