experiment : 使用OD 调试带启动参数的程序
来源:互联网 发布:多个相同表格数据提取 编辑:程序博客网 时间:2024/04/30 09:00
看到有这样一个问题:
怎么调试需要命令行启动的软件??没有命令行启动程序就自动关闭,命令行不是固定的,用od怎么调试这种软件?
带参数程序的调试
模拟一个需要命令行的Demo
// srcCmdParamProg.cpp : Defines the entry point for the console application.//#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ _tprintf(L"argc = %d\r\n", argc); /// 检测命令行参数 if (argc < 2) { _tprintf(L"parameter not enough, sorry :(\r\n"); return -1; } _tprintf(L"do something\r\n"); _tprintf(L"END, press any key to quit\r\n");return 0;}
直接打开OD, 找到该程序, 填写命令行参数, 运行.
F8往下走, 到main函数
00F21187 > \A1 1C30F200 mov eax, dword ptr [F2301C]00F2118C . 8B0D 8020F200 mov ecx, dword ptr [<&MSVCR90.__wini>; MSVCR90.__winitenv00F21192 . 8901 mov dword ptr [ecx], eax00F21194 . FF35 1C30F200 push dword ptr [F2301C]00F2119A . FF35 2030F200 push dword ptr [F23020]00F211A0 . FF35 1830F200 push dword ptr [F23018]00F211A6 . E8 55FEFFFF call 00F21000 ; main函数00F211AB . 83C4 0C add esp, 0C00F211AE . A3 3030F200 mov dword ptr [F23030], eax00F211B3 . 391D 2430F200 cmp dword ptr [F23024], ebx00F211B9 . 75 37 jnz short 00F211F200F211BB . 50 push eax ; /status00F211BC . FF15 8420F200 call dword ptr [<&MSVCR90.exit>] ; \exitF7进入main函数, 可以看到参数检测, argc = 3
00F21000 /$ 56 push esi00F21001 |. 8B35 A020F200 mov esi, dword ptr [<&MSVCR90.wprint>; MSVCR90.wprintf00F21007 |. 57 push edi00F21008 |. 8B7C24 0C mov edi, dword ptr [esp+C] ; 参数数量为300F2100C |. 57 push edi ; |00F2100D |. 68 F420F200 push 00F220F4 ; |format = "argc = %d.."00F21012 |. FFD6 call esi ; \wprintf00F21014 |. 83C4 08 add esp, 800F21017 |. 83FF 02 cmp edi, 200F2101A |. 7D 10 jge short 00F2102C ; 入参检测, 要求至少带一个参数00F2101C |. 68 1021F200 push 00F22110 ; UNICODE "parameter not enough, sorry :(",CR,LF00F21021 |. FFD6 call esi00F21023 |. 83C4 04 add esp, 400F21026 |. 5F pop edi00F21027 |. 83C8 FF or eax, FFFFFFFF00F2102A |. 5E pop esi00F2102B |. C3 retn00F2102C |> 68 5421F200 push 00F22154 ; UNICODE "do something",CR,LF00F21031 |. FFD6 call esi00F21033 |. 68 7421F200 push 00F22174 ; UNICODE "END, press any key to quit",CR,LF00F21038 |. FFD6 call esi00F2103A |. 83C4 08 add esp, 800F2103D |. 5F pop edi00F2103E |. 33C0 xor eax, eax00F21040 |. 5E pop esi00F21041 \. C3 retn
当命令行不是固定的, 如何捕获参数
如果目标程序是带参数自己启动, 可以用OD带参数调试目标程序, 在目标程序参数检测逻辑中分析参数要求.
如果目标程序是有父进程给定参数启动, 用OD调试该父进程, 找出应给定目标程序什么参数.
然后再用OD给定该参数, 调试目标程序.
- experiment : 使用OD 调试带启动参数的程序
- OD 调试带启动参数的程序
- 使用OD调试程序的时候,如何给程序传递参数
- OD带源代码调试
- gdb调试带参数的程序
- gdb调试带参数的程序
- VS2010 调试带参数的程序方法
- gdb调试带参数的程序
- gdb 调试带参数的程序
- gdb调试带参数的程序
- GDB调试带参数的程序
- gdb - 调试带参数的程序
- gdb调试带参数的程序
- gdb调试带参数的程序
- gdb调试带参数的程序
- gdb 调试带参数的程序
- gdb 调试带参数的程序-转
- CodeBlocks调试带参数的程序
- XMPP Standars Foundation
- HDU 2680
- CF 327A - Flipping Game
- 使用mybatis执行oracle存储过程
- 新的开始之 CentOS 修改Root密码
- experiment : 使用OD 调试带启动参数的程序
- 房租分配问题
- 回滚段与撤销段的区别
- hdu1067 N - Gap
- POJ2752_Seek the Name, Seek the Fame_KMP_对next数组的运用
- 教你用ajax来初始化一个zTree
- 项目中 session 找不到
- Android实现ListView异步加载图片
- 解决 eclipse ADB server didn't ACK问题