- Sep 18 Sun 2011 22:45
-
ODbgScript源碼學習(十六)
- Sep 13 Tue 2011 22:41
-
ODbgScript源碼學習(十五)
int wndprog_get_text(char *s, char *mask, int *select, t_sortheader *ph, int column) //獲取文本
- Sep 06 Tue 2011 22:25
-
ODbgScript源碼學習(十四)
- Sep 06 Tue 2011 22:23
-
ODbgScript源碼學習(十四)
- Sep 04 Sun 2011 17:00
-
ODbgScript源碼學習(十三)
Progress.cpp:
LRESULT CALLBACK wndprog_winproc(HWND hw,UINT msg,WPARAM wp,LPARAM lp) {
int i,m,shiftkey,controlkey; //定義整型變量
HMENU menu,mLoad,mCmd,mRun,mLabels=NULL,mVars=NULL; //定義多項菜單句柄
LRESULT CALLBACK wndprog_winproc(HWND hw,UINT msg,WPARAM wp,LPARAM lp) {
int i,m,shiftkey,controlkey; //定義整型變量
HMENU menu,mLoad,mCmd,mRun,mLabels=NULL,mVars=NULL; //定義多項菜單句柄
- Sep 03 Sat 2011 13:20
-
ODbgScript源碼學習(十二)
- Sep 02 Fri 2011 18:36
-
ODbgScript源碼學習(十一)
- Sep 01 Thu 2011 12:35
-
ODbgScript源碼學習(十)
- Aug 31 Wed 2011 07:10
-
ODbgScript源碼學習(九)
- Aug 30 Tue 2011 07:05
-
ODbgScript源碼學習(八)
guicon.h
#pragma once
#ifdef _DEBUG
#ifndef __GUICON_H__
#define __GUICON_H__
//#include "stdafx.h"
void RedirectIOToConsole(); //重定向輸出輸入到命令行
#endif
#endif
/* End of File */
- Aug 29 Mon 2011 06:59
-
ODbgScript源碼學習(七)
//在反彙編窗口上下文菜單下調用
int mruGetCurrentMenu(char* buf) {
char buf2[4096] = {0}; //定義為0,4096個字節的緩衝區buf2
char key[5];
int mruGetCurrentMenu(char* buf) {
char buf2[4096] = {0}; //定義為0,4096個字節的緩衝區buf2
char key[5];
- Aug 28 Sun 2011 06:59
-
ODbgScript源碼學習(六)
接下來繼續
mru.h:
void mruAddFile(char* szFilePath);//添加文件
int mruGetMenu(char* buf);//獲取菜單
int mruGetCurrentMenu(char* buf);//獲取當前菜單
int mruGetCurrentMenu(HMENU mmru, int cmdIndex); // 獲取腳本上下文菜單 For Dynamic MRU List (Script Window Context Menu)
int mruCmdMenu(HMENU mmru,int cmdindex);//cmd菜單
mru.cpp:
//mru使用的原因是Ollydbg主菜單是靜態的,所以為下一個olldbg開始存儲mru
void mruAddFile(char* szFilePath) {//參數是文件路徑
char buf[4096] = {0};//定義一個字節為0大小為4096的緩衝區
int n;
char key[5];//定義字串
strcpy(key,"MRU ");//把"MRU"特徵字串複製到key
HINSTANCE h=hinstModule();//獲取自身ODbgScript.dll的模塊句柄
for(n=1; n<=5; n++) { //n為1至5時循環
key[3]=n + 0x30; //ASCII n 根據n不同 key為"MRU1""MRU2""MRU3""MRU4""MRU5"
ZeroMemory(&buf, sizeof(buf));//buf歸0
Pluginreadstringfromini(h,key,buf,0);//讀ollydbg.ini文件中的MRU存取的路徑到buf
if (strcmp(buf,szFilePath)==0) {//如果文件路徑與參數輸入的路徑相同
//Move File to first MRU移動文件到最先的MRU
key[3]='1';//即"MRU1"
Pluginreadstringfromini(h,key,buf,0);//再次讀ollydbg.ini第一項"MRU1"
Pluginwritestringtoini(h,key,szFilePath);//寫入新路徑
key[3]=n + 0x30;//重新寫入當前MRU讀到的位置
Pluginwritestringtoini(h,key,buf);//寫入當前位置的MRU
return;
}
}
for(n=4; n>0; n--) {//如果n從4遞減到1
//Add File then Move others 添加文件然後移除其他
key[3]=n+0x30;//根據n不同 key為"MRU4""MRU3""MRU2""MRU1"
ZeroMemory(&buf, sizeof(buf));//緩衝區歸0
Pluginreadstringfromini(h,key,buf,0);//讀出路徑到buf
if (strlen(buf)) {//如果路徑不為空
key[3]=n+1+0x30;//移到下一位MRU
Pluginwritestringtoini(h,key,buf); //即把路徑往下移
}
}
key[3]='1';//MRU1
Pluginwritestringtoini(h, key, szFilePath);//寫入路徑
}
//在主菜單被調用一次ON MAIN MENU, ITS CALLED ONCE
int mruGetMenu(char* buf) {
char buf2[4096] = {0};//定義為0長度為4096的緩衝區
char key[5];
char key2[5];
int p=0;
int c,v;
string path;//路徑
HINSTANCE h=hinstModule();//獲取自身ODbgScript.dll的模塊句柄
strcpy(key,"MRU ");//賦值"MRU"到key
strcpy(key2,"MRU ");//賦值"MRU"到key2
for(int n=1; n<=5; n++) {//n為1至5時循環
key[3]=n+0x30; //ASCII n 根據n不同 key3"1""2""3""4""5"
key2[3]=key[3];//複製一個副本到key2
ZeroMemory(&buf2, sizeof(buf2));//緩衝區歸0
Pluginreadstringfromini(h,key,buf2,0);//獲取ini文件中的MRU到buf2
Pluginwritestringtoini(h,key2, buf2);//寫入buf2到mru
if (strlen(buf2)) {//如果路徑不為空
if (PathFileExists(buf2)) {//如果路徑有效
buf[p]=0x32; p++;//緩衝區的第p為"2"
buf[p]=key[3]; p++;//緩衝區的第p+1為"3"
buf[p]=0x20; p++;//緩衝區的第p+2為" "
path=buf2;//路徑為讀出的路徑
c=path.rfind('\\') + 1;//使用std字串函數最後一次"\\"的位置,并到下一位
while ( (v = strchr(&buf2[c],',')-&buf2[c]) > 0) {//"\\"之後一位開始查找第一個','位置,v是最後一個"\\"和之後第一個','的距離,假如','存在而且兩點距離不重合時候
buf2[c+v]='.';//替換','到'.'
}
while ( (v = strchr(&buf2[c],'{')-&buf2[c]) > 0) {//"\\"之後一位開始查找第一個'{'位置,v是最後一個"\\"和之後第一個'{'的距離,假如','存在而且兩點距離不重合時候
buf2[c+v]='[';//替換','到'['
}
while ( (v = strchr(&buf2[c],'}')-&buf2[c]) > 0) {//"\\"之後一位開始查找第一個'}'位置,v是最後一個"\\"和之後第一個'}'的距離,假如','存在而且兩點距離不重合時候
buf2[c+v]=']';//替換','到']'
}
strcpy(&buf[p],&buf2[c]); p+=strlen(&buf2[c]);//串拷貝
buf[p]=',';p++;
}
}
}
if (p>0) buf[--p]=0;//如果p大於0,緩衝區buf的前p為歸0
return p; //返回指針
}