能力值:
(RANK:300 )
2 楼
if (GetLastError() == ERROR_ALREADY_EXISTS) //程序已经运行
也就说这句话GetLastError() == ERROR_ALREADY_EXISTS为真就说明有实例在进程中。
如果为假呢?
可以将这段代码用 nop填掉。
能力值:
( LV2,RANK:10 )
3 楼
明白是将这里nop掉,能否讲下怎样分析到这里
看了好多分析的文章,呵呵,就是不清楚怎么根据源代码配合OD来分析。
能力值:
(RANK:260 )
4 楼
如果是用自己写的程序做实验,可以使用OD进行源码调试。
只要程序编译和连接时带着调试信息就可以。
另外,源代码文件路径不能有中文。
方法:
首先配置编译器生成带调试信息的程序,如果是Debug模式,默认已经带有了。如果是Release模式,则按此配置:
然后在OD中,在CPU窗口中,最右侧的一栏,默认为“注释”,点击标题栏可以在“注释”、“源码”、“统计”三者切换。只要切换到“源码”栏即可。
上传的附件:
能力值:
( LV2,RANK:10 )
5 楼
非常感谢指点,
我开发工具是:VC 6.0 +SP6
开发平台:WINXP SP2
OD版本:OllyICE 1.0 版本(原版本也试了)
在OD调试中,看不到源代码(已经切换到OD 的Source窗口)
VC的设置我比较熟悉,调试模式也设置了。
如果可以的话,能否加下我QQ:413982083
能力值:
(RANK:300 )
6 楼
不如在函数调用之前添加一个
_asm{ int 3};
呵呵,估计可以ok了.
能力值:
( LV2,RANK:10 )
7 楼
很有道理!确实可以了?
为什么加这个就可以了呢?
想知道下原理,嘿嘿。牛
能力值:
( LV2,RANK:10 )
8 楼
int 3是汇编指令,断点.
内联宏汇编,int表示触发软中断,3是中断号,
asm是C++的关键字,_asm则是编译器扩展的关键字,表示在此处插入汇编指令.
int 3 相当于 DebugBreak, 机器码就是CC
INT 00H —“0”作除数
INT 01H —单步中断
INT 02H —非屏蔽中断(NMI)
INT 03H —断点中断
INT 04H —算术溢出错误
INT 05H —打印屏幕和BOUND越界
INT 06H —非法指令错误
INT 07H —处理器扩展无效
INT 08H —时钟中断
INT 09H —键盘输入
INT 0BH —通信口(COM2:)
INT 0CH —通信口(COM1:)
INT 0EH —磁盘驱动器输入/输出
INT 11H —读取设备配置
INT 12H —读取常规内存大小(返回值AX为内存容量,以K为单位)
INT 18H —ROM BASIC
INT 19H —重启动系统
INT 1BH —CTRL+BREAK处理程序
INT 1CH —用户时钟服务
INT 1DH —指向显示器参数表指针
INT 1EH —指向磁盘驱动器参数表指针
INT 1FH —指向图形字符模式表指针
能力值:
( LV2,RANK:10 )
9 楼
00401025 |. CC int3
00401026 |? CC int3
00401027 |? C745 FC 00000>mov dword ptr [ebp-4], 0 ; HANDLE handle = NULL;
0040102E |. CC int3 ; _asm{ int 3};
0040102F |? 8BF4 mov esi, esp ; handle = CreateEvent(NULL,TRUE,TRUE, "MyEvent");
00401031 |? 68 305A4100 push 00415A30
00401036 |? 6A 01 push 1
00401038 |? 6A 01 push 1
0040103A |? 6A 00 push 0
0040103C |? FF15 58B14100 call dword ptr [<&KERNEL32.CreateEven>
00401042 |? 3BF4 cmp esi, esp
00401044 |? E8 B7040000 call _chkesp
00401049 |. 8945 FC mov dword ptr [ebp-4], eax
0040104C |? 8BF4 mov esi, esp ; if (GetLastError() == ERROR_ALREADY_EXISTS) //程序已经运行
0040104E |? FF15 54B14100 call dword ptr [<&KERNEL32.GetLastErr>
00401054 |? 3BF4 cmp esi, esp
00401056 |? E8 A5040000 call _chkesp
0040105B |? 3D B7000000 cmp eax, 0B7
00401060 |? 75 2C jnz short 0040108E
00401062 |? 68 385A4100 push 00415A38 ; printf("have run one \n");
00401067 |? E8 14040000 call printf
0040106C |. 83C4 04 add esp, 4
0040106F |? 8BF4 mov esi, esp ; CloseHandle(handle);
00401071 |. 8B45 FC mov eax, dword ptr [ebp-4]
能力值:
(RANK:300 )
10 楼
搂主学的很快.....嘿嘿..