首页
社区
课程
招聘
请问如何能获得OLLYDBG当前选择的地址,使用什么插件函数?详细请进内
发表于: 2005-11-2 18:19 6304

请问如何能获得OLLYDBG当前选择的地址,使用什么插件函数?详细请进内

2005-11-2 18:19
6304
请问如何能获得OLLYDBG当前选择的地址,使用什么插件函数?

请看下图


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
简单:
extc int _export cdecl ODBG_Pluginmenu(int origin, char data[4096], void *item)
{
t_dump			*pd;
ulong			adr;

pd=(t_dump *)item;
adr=pd->sel0;//鼠标所选地址
....
}
2005-11-2 18:30
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最初由 heng9ml 发布
简单:
[code]
extc int _export cdecl ODBG_Pluginmenu(int origin, char data[4096], void *item)
{
t_dump *pd;
........


大哥,好象不行啊。

addr不能得到选择的地址啊。

我调试发现addr总是等于0的

我想要光标所在地的那个地址,不一定是鼠标选的
2005-11-2 20:59
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
可以的,不信你可以用我写的这个插件看看:
http://bbs.pediy.com/showthread.php?s=&threadid=17129
这个插件就是用的上面的代码实现“自动获取光标所在行的地址”的,也不一定要用鼠标点的。
这个问题以前我在论坛问过,一直没人回答,昨天看了下od的api,自己解决了。
要在反汇编窗口中调用啊!
2005-11-3 09:00
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 heng9ml 发布
可以的,不信你可以用我写的这个插件看看:
http://bbs.pediy.com/showthread.php?s=&threadid=17129
这个插件就是用的上面的代码实现“自动获取光标所在行的地址”的,也不一定要用鼠标点的。
这个问题以前我在论坛问过,一直没人回答,昨天看了下od的api,自己解决了。
要在反汇编窗口中调用啊!


能否提供
http://bbs.pediy.com/showthread.php?s=&threadid=17129

这个的源代码?

谢谢

extc int _export cdecl ODBG_Pluginmenu(int origin, char data[4096], void *item)
{
    t_dump *pd;

         switch (origin)
    {
    case PM_MAIN:
        strcpy(data, "0 &1 Find ASCII|1 &2 Find UNICODE|2 &3 查找结果|3 &4 锁定窗口|4 &5 取消锁定");
        return 1;
    case PM_DISASM:     // Popup menu in Disassembler
        pd = (t_dump *)item;

       adr=pd->sel0;//我在这里加了我的代码,但那个pd指针有时是空指针来的,所以产生非法,这行代码一定要点鼠标又键才会执行,点左键都不执行

                  if (NULL == pd || 0 == pd->size)    // Window empty, don't add
            return 0;
        // Add item "Ultra String Reference"
        // if some part of Disassembler is selected
        if (pd->sel1 >pd->sel0)
        {
            sprintf(
                data,
                "0 &Ultra String Reference{"
                "0 &1 Find ASCII|1 &2 Find UNICODE|2 &3 查找结果|3 &4 锁定窗口|4 &5 取消锁定"
                "}"
            );
        }
        return 1;
    }
    return 0;
2005-11-3 09:44
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
你将“adr=pd->sel0;”移到
“if (NULL == pd || 0 == pd->size)     return 0;”
后面不就行了。
2005-11-3 10:31
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 heng9ml 发布
你将“adr=pd->sel0;”移到
“if (NULL == pd || 0 == pd->size) return 0;”
后面不就行了。


这样都不行啊,因为我想在任何时候都能得到当前的光标地址值,但我就算放在后面,一样要按下鼠标右键才能执行adr=pd->sel0这行代码,请问大家应该如何处理呢?
2005-11-3 10:59
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最初由 dssz 发布


这样都不行啊,因为我想在任何时候都能得到当前的光标地址值,但我就算放在后面,一样要按下鼠标右键才能执行adr=pd->sel0这行代码,请问大家应该如何处理呢?


我调试发现OLLYDBG1.1D版,总是会把当前光标所在的的地址值放到[4cda2d]中的,我就是一直找不到应该如何获得它的值
我一个很苯的做法
          int *igp;
          _asm {push eax
                mov eax,4cda2dh
                mov igp,eax
          pop eax};

但这样只能在当前的OD版本中执行,不能通用,很郁闷!!
2005-11-3 11:05
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
ODBG_Pluginshortcut(int origin,int ctrl,int alt,int shift,int key,void *item)
可以满足你的要求
2005-11-3 12:52
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 heng9ml 发布
ODBG_Pluginshortcut(int origin,int ctrl,int alt,int shift,int key,void *item)
可以满足你的要求


问题一样不能解决,请看

http://bbs.pediy.com/showthread.php?s=&threadid=18167
2005-11-3 13:05
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
设置快捷键为alt+shift+F12,用下面代码测试通过
将光标移到某行后,按一下快捷键“Alt+shift+F22”看看显示结果

int test(void *item)
{
        t_dump                *pd;
        ulong       adr;
        char                * s;
        pd=(t_dump *)item;
         if (NULL == pd || 0 == pd->size)
         {
            return 0;
         }
         else
         {
                adr= pd->sel0;
                sprintf(s,"%08X",adr);
                MessageBox(g_hwMainWnd,NULL,s,MB_OK);
                return 1;
         }

}

extc int _export cdecl ODBG_Pluginshortcut(int origin,int ctrl,int alt,int shift,int key,void *item)
{
        if(alt!=0 && ctrl==0)
  {
      if (key==VK_F12 && origin==PM_DISASM && item!=NULL)
          {
            if (shift!=0)
                        test(item);

          }
          else
                  return 0;
  }       
  else
                return 0;                            // 识别不了快捷键
}
2005-11-3 14:27
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 heng9ml 发布
设置快捷键为alt+shift+F12,用下面代码测试通过
将光标移到某行后,按一下快捷键“Alt+shift+F22”看看显示结果

int test(void *item)
{
........


多谢兄弟的热情指导,现已经找到原因了。

我还想问问应该如何改变地址栏的颜色呢,我想当暂时取消断点的时候改变颜色,例如我想变成蓝色,应该如何处理呢,谢谢!!!
2005-11-3 16:48
0
游客
登录 | 注册 方可回帖
返回
//