|
在RadAsm中如何把winDBG作为默认的调试器啊?
在工程属性里设置,不是在IDE选项中设置的。 可以在“工程->工程选项”中修改,也可以在创建工程时的向导中修改。 或者直接修改工程模板配置,比如对FASM工程,就修改fasm.ini。 具体修改哪里,打开这个文件看一下哪里出现“OllyDBG”就知道了 |
|
[求助]诚恳请教:WM_COMMAND 和WM_LBUTTONDOWN的区别
只因你下断的窗口是系统创建的,窗口过程是内核空间,ring3的调试器自然无法访问。 有很多系统的窗口和控件,它们的ClassProc都是在内核中。 建议:“消息断点”实际中很少使用,只有当程序使用自定义的窗口类并且自己创建窗口时,才有效。其它情况,比如MFC、或Delphi、或Dialog等,直接使用“消息断点”功能不太管用。 还是要提高自己分析能力,想办法对程序可能调用的API下断点,这才是正确的方向。“消息断点”不是万能的,甚至可以说只在很少的情况下才有效。 |
|
[求助]关于2004年的大礼包
忘了说了,置顶贴,绿色的那个。 |
|
|
|
[求助]诚恳请教:WM_COMMAND 和WM_LBUTTONDOWN的区别
对话框的消息在DialogProc里处理,OD里的“消息断点”是对ClassProc(或者WndProc,我记不清了)下条件断点来实现的(可以自行验证一下)。 所以,OD的“消息断点”对对话框不适用。 只要手动在DialogProc中下断点就可以了。通常的方法是先断DialogBoxParamA/W(不过既然你是用汇编程序编写的,一般载入程序后直接往下翻就能看到DialogBoxParam了),查看参数找到DialogProc,然后再到DialogProc那里下断点。 为了模拟OD的“消息断点”,在DialogProc处下断点时,加上断点条件[esp+8]==WM_COMMAND就可以了。 |
|
|
|
[求助]反编译之后,怎么建立内存补丁
先将程序断下来,用Debug API或用0xeb,0xfe都可以。等确认程序执行到这里了,将线程挂起(用Debug API的话,断点触发会自动挂起),然后GetThreadContext获得其寄存器的值,再根据EBP的值来换算出正确的地址,然后ReadProcessMemory就可以了。 最后恢复原来程序的运行,如果用Debug API,还需要Dettach调试器,用DebugActiveProcessStop这个API。 |
|
[求助]VC程序如何调用masm编译器?
将调用汇编器的命令字符串正确格式化,然后直接调用CreateProcess就可以,至于汇编器输出信息,将stdout和stderr句柄重定向就可以,通常是创建一个pipe,然后将pipe的句柄传到子进程的stdout和stderr里,父进程通过读取pipe的方法来捕获子进程的输入。方法是通过CreateProcess的lpStartupInfo参数。 具体细节看一下MSDN中CreateProcess和STARTUPINFO的说明就清楚了。 |
|
|
|
[求助]OD使用障碍
F8的原理是通过在CALL的下一条指令设置一次性断点然后运行程序来实现的。 如果F8步过的CALL的内部有代码触发了调试事件,就会让调试器中断下来。 从子程序里出来,试试Ctrl+F9 |
|
[求助]我在按钮事件下了。鼠标弹起断点后,OD并没有拦下,这时候改怎么办?
这个VM的复杂度相当大,如果没有官方的文档(至少是半官方,像VB那种),纯逆向PB的虚拟机,所需要的精力花销太大,还不如去买一套软件划算。 |
|
[求助]请问od怎么在程序载入之前下断点啊
可能是动态内存,每次运行都不一样,也可能是栈空间,程序刚启动时commit的栈很小,随着程序运行,栈自动增长。 你换个方法,不要下内存断点,记下出错的代码的位置,直接下断点。 |
|
[求助][求助]调试vb程序,如何才能进入程序领空。
这是P-CODE,或者叫伪指令码,程序是被VB的虚拟机解释执行的,没有所谓“用户代码领空” |
|
[求助]我想用程序定位一个Call的首地址不知道怎么做 请教了
这是一个虚函数调用,找到对象的虚表,其中放的就是虚函数的指针了。 |
|
[求助]VB如何获取另一运行程序中timer的ID和循环周期等参数?
不懂VB,不过不管什么语言,能调用API就可以。 用Debug API,对程序的SetTimer下断点,再GetThreadContext得到esp,再ReadProcessMemory从堆栈中取得相关的参数值。 |
|
|
|
[求助]如何计算FDT所在扇区?
RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec – 1)) / BPB_BytsPerSec; 在这篇文档的第13页。把文档读一遍,就自然会明白了。 |
|
[求助]驱动高手请进,我是初学者,有个小问题!
C++与C是两种不同的编程语言。 C++之父Bjarne Stroustrup曾经多次呼吁,不要按照“C语言的面向对象增强版本”来学习C++,因为C++语言与C语言本来就是两种不同的语言。 所以,如果用C++写程序,那么就用C++的编译器来编译。 如果想用C的编译器,那就用C把程序重写一遍。 extern "C"只表示以下声明的符号是按C的约定的,并不能把C++代码变成C代码。 |
|
[求助]各位大哥进来帮帮忙
如果真想学会编程,那一定要把这东西弄懂。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值