首页
社区
课程
招聘
[求助]ollydbg调试的问题
发表于: 2016-7-10 22:24 8601

[求助]ollydbg调试的问题

2016-7-10 22:24
8601
如何使用ollydbg获取应用程序的首址?

我目前的做法是,假如使用C写了一个程序,编译链接通过后为一个PE文件 test,我使用 ida pro 反编译它,找到 _main 后,就获得首址 test_addr。然后用 ollydbg 打开该PE文件 test,使用快捷键组合 ctrl + g,在弹出框中输入之前获得的首址 test_addr,就会跳转到程序的开头。然后使用 F2 键在该开头语句设置断点。

上面的方法是结合了ollydbg 和 ida pro 一起去获取PE文件首址。是否有更简单的方法?因为我只是想使用ollydbg调试PE文件,因此是否可以直接在ollydbg中找到该PE文件的首址?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
od不是会自动断在入口函数那里吗
2016-7-11 07:32
0
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
没加壳的情况下
2016-7-11 07:33
0
雪    币: 0
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上正解
2016-7-11 08:51
0
雪    币: 74
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
??
你用的ollydbg是什么版本的?我的是 1.10

我调试的程序里,在打开的对话框里选择了要调试的PE文件后,我按 F7 或者 F8 后,它会开始执行第一条语句,但不是 _main.......

我的PE文件是在vc6.0++里面编译链接的(应该没加壳吧?)。在 ida pro 里看,_main的地址为 0x401005;但按照上面的方式(F7或F8),开始地址为 0x42c000。
2016-7-11 18:24
0
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
我的是1.0.10 不过和版本没关系的
发一个看雪大大的教程给你
http://bbs.pediy.com/showthread.php?t=196797
看完后算入门吧
2016-7-11 20:43
0
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
http://bbs.pediy.com/showthread.php?t=184679
2016-7-11 20:45
0
雪    币: 638
活跃值: (1432)
能力值: ( LV9,RANK:175 )
在线值:
发帖
回帖
粉丝
8
OD载入一般会停在EP处,如果设置了停在WinMain 有时就能达到跟IDA一样了,再说了就算没停在你说的什么_main,你根据RVA地址找找不就行了
2016-7-11 22:12
0
雪    币: 74
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
EP处是什么地方?

此外,因为之前是在 linux 下使用gdb调试的,它可以很方便的使用 disassemble main 来反编译main 函数,马上就可以知道main的地址并设置断点。

在windows下,我知道ida pro可以找到main的地址,然后在ollydbg中设置断点。然而,我很想所有的工作在 ollydbg中完成,但我不太清楚如何可以找到 main 的地址(之前的帖子说到的程序在ollydbg中运行时会自动停在“入口”处,但我发现这个“入口”并不是main的地址)。
2016-7-13 09:01
0
雪    币: 74
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢你提供的链接(里面包含几乎所有ollydbg的调试信息),但我只想知道如何在 ollydbg中找到main的地址并设置为断点(其它的信息暂时未能用到)...
2016-7-13 09:03
0
雪    币: 638
活跃值: (1432)
能力值: ( LV9,RANK:175 )
在线值:
发帖
回帖
粉丝
11
你得去了解一下什么才是exe真正的入口地址,你用ida找到main的地址后转化成rva来ctrl+G定位od中的va地址就行了
2016-7-13 12:32
0
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
在不加壳的情况下 od会自动找到main函数 并自动断在main函数的入口处
2016-7-13 12:51
0
雪    币: 74
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢你的回复。

你可能没有看我之前的帖子,你上面提到的方法正是我之前使用的.......
2016-7-13 15:07
0
雪    币: 74
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
你所指的“不加壳”是指什么?编译成EXE文件一定会加PE头(如:ELF文件会加ELF header),这算加壳吗(例子中的PE文件test 是直接从 vc6++ 中编译生成的)?
2016-7-13 15:09
0
雪    币: 333
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
你直接编译出来的是没有加壳的 PE头不是壳
2016-7-13 20:08
0
雪    币: 2595
活跃值: (4489)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主,你其实是想找到main函数的起始地址吧,严格意义上这不是程序首址。其实对于现在这些编程语言,有前人的成果,对应不同语言写的程序找到main函数起始,网上搜索一下都有。
你目前这个方法,对于开启了ASLR的程序就不行了。
2016-7-13 20:40
0
雪    币: 74
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我其实并不想用 ida pro,因为它的作用(以我所使用到的功能来算)仅仅是获取main的地址,或其他函数的地址。

我在Linux下,只使用gdb就可以获取各个函数的地址(包括main),并且设置断点调试 等等,所有的工作只是使用 gdb 就行

我不清楚 ollydbg 是否也可以像gdb那样,如何可以,怎样实现?
2016-7-13 20:56
0
雪    币: 2595
活跃值: (4489)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
只要有符号文件od也可以的。gdb可以是因为编译时后加了调试选项,生成的代码带有调试信息。你说的这个功能,是个调试器应该都有吧,用的上的前提是要有符号文件。
2016-7-13 23:01
0
雪    币: 74
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
.......

如果ollydbg可以实现,那该如何操作?
2016-7-14 08:25
0
雪    币: 2595
活跃值: (4489)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
很简单,你编译程序会产生和程序同名的pdb文件,把它放在和od一个目录就行了。
2016-7-14 13:30
0
游客
登录 | 注册 方可回帖
返回