用SoftIce跟踪16位程序

舟中夜起 2000-05-23 10:50:00
各位大虾,我跟踪一个16位程序,它调用了一个带命令行的Exe程序,我试了用
:BPX WINEXEC
竟然没有触发,而且它还读写了一个文件,请教如何知道这个文件名称。
多谢了
...全文
210 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
舟中夜起 2000-05-27
  • 打赏
  • 举报
回复
终于找到了命令行参数
在yield触发之后,在ss:sp+12的地址再加上0x69是参数值。
感激不尽!

可是库文件一直没有触发出来,
明显是在操作库文件时,ReadFile触发正常
是不是有可能从ReadFile找到文件名称,也就是根据文件句柄找到文件名称?

继续请教大师:)
舟中夜起 2000-05-26
  • 打赏
  • 举报
回复
大师就是大师
我用yield()截取到了调用程序,知道了调用的程序名称,那如何知道命令行呢?

:pbx getcommandlinea没有触发:(

在跟踪打开文件名称时:
:bpx OpenFile 或
:bpx _lopen
还是没有触发,是不是在操作一些文件的时候可以不调用这些API或函数呢?

大师出马,一个顶两,再帮帮我这个菜鸟
pccrazy 2000-05-26
  • 打赏
  • 举报
回复
又打错了,
32位offset是用
d ss:esp+4
d ss:esp+8
d ss:esp+12
...
pccrazy 2000-05-26
  • 打赏
  • 举报
回复
1,我没有Yield()函数的参数说明,你只有试一试:
若拦截的程序是16位的offset用下列方式查看参数的地址
d ss:sp+2
d ss:sp+4
d ss:sp+6
...

若拦截的程序是32位的offset用下列方式查看
用下列方式查看参数的地址
d ss:esp+4
d ss:esp+6
...

打开文件的方式很多,再试一试
bpx fopen
pccrazy 2000-05-25
  • 打赏
  • 举报
回复
1.对于16位程序可试一试 OpenFile 或是 _lopen
16位程序运行其它程序还有 Yield() 函数

2.要想得到程序的命令行还有一种方法:
在每个程序加载的时候都会调用 GetCommandLine(),
还可试一试 pbx getcommandline
舟中夜起 2000-05-25
  • 打赏
  • 举报
回复
非常谢谢老兄!
我用
:bpx createfilea
拦截到了几个文件名称,可是一个主要的库文件名称没有拦截到:(
是不是还有其它的API也可以创建文件?

:bpx createprocessa
没有拦截成功,这是一个运行在win3.11上的程序A,它调用了一个文件B.EXE,我用task命令发现它被调用,而且执行B,则提示缺少命令行,我用
:bpx winexec
也没有拦截到
难道也还有其它的API也可调用一个可执行文件?

再次向您请教
pccrazy 2000-05-24
  • 打赏
  • 举报
回复
注意,是 d ss:esp+4
不是 d ss:esp+4 creatfilea


pccrazy 2000-05-24
  • 打赏
  • 举报
回复
真是对不起 是 createprocessa 少了一个 'a'

在用了 pbx createfilea 激活softice后,

用 d ss:esp+4 createfilea 显示第一个参数的地址,例如:
63 24 6a 00 00 00 00 00 ...
第一个参数的地址就为 006a2463
用 d 6a2463 就可看见 createfilea的第一个参数了。
createprocessa也是一样的


舟中夜起 2000-05-24
  • 打赏
  • 举报
回复
多谢老兄,可是:
:BPX CREATEFILEA
倒是触发了,可是如何找到文件名称的,几个PUSH传递的参数里都没有发现

还有,要触发createprocess应该包括哪个DLL库,我把范例里面的都包括了,可是还不行啊,老是标志没有定义:(

老兄,再帮帮忙
pccrazy 2000-05-24
  • 打赏
  • 举报
回复
这就简单了,调常当父程序调用子程序时,是将程序的参数由右到左的顺序推入堆栈中,再将下一个指令的地址进栈。所以用 pbx createprocess拦截后用
32位程序: d ss:esp
16位程序: d ss:sp

再通过堆栈的找到createprocess的第二个参数就行了嘛
舟中夜起 2000-05-24
  • 打赏
  • 举报
回复
我跟踪的是Windows程序, 程序A调用程序B, 我现在是想知道B的命令行参数, 但是试了各种办法没有成功。
pccrazy 2000-05-23
  • 打赏
  • 举报
回复
1.要跟踪DOS程序用 softice 下的 dldr <路径\程序名> 。
跟踪DOS程序最好2.0版

2.softice for win95 2.0 要拦截Dos下的读文件用 bpint 21 ah=4d
softice 3.0以后用 bpint 21 if(ah=4d)
要拦截 Windows下的程序用 bpx createfilea
目录: 本手册的功能 读者对象 本手册的组织结构 排版风格 如何使用本手册 其它相关文件 (外国人就是罗嗦,为了求全,只好随他了。) 第一章 欢迎使用SoftICE 产品概况 介绍SoftICE 介绍Symbol Loader 如何得到客户服务 联系NuMega公司的技术支持中心 第二章 安装SoftICE 介绍 硬件和软件要求 SoftICE显示选择 安装之前 安装 安装之后 配置BOOT。INI以便在多处理器系统中支持单CPU 配置SoftICE在Windows 95下正确载入 通过串行口连接第二台计算机 解决显卡问题 第三章 SoftICE教程 介绍 载入SoftICE 构造GDIDEMO样本程序 装入GDIDEMO样本程序 控制SoftICE屏幕 通过源码跟踪和逐步调试 读本地数据 设定断点和目标断点 设定一个断点 设定STICKY断点 (此处不知STICKY作何解释。待我读到此处时大概会明白) 使用SoftICE命令行信息 使用符号和符号表 设定条件断点 设置BPX断点 编辑断点 设定读写内存断点 第四章 将代码装入SoftICE 调试的概念 准备调试程序 准备调试设备驱动程序和VxDs(虚拟设备驱动程序) 手工装入SoftICE 装入SoftICE for Windows 95 装入SoftICE for Windows NT 构造带有调试信息的程序 使用Symbol Loader转换和载入文件 修改模块设定 修改通用设定 修改编译设定 修改调试设定 指定程序的源文件 删除符号表 在DOS命令行里使用Symbol Loader 使用Symbol Loader的命令行工具 NMSYM命令行的语法 使用NMSYM来转换符号信息 使用NMSYM来装入模块和符号信息 使用NMSYM来装入或导出符号表 使用NMSYM卸载符号信息 使用NMSYM来保存历史记录 关于NMSYM的信息 第五章 SoftICE导航 介绍 呼出SoftICE窗口 启动时禁用SoftICE 使用SoftICE窗口 调整窗口大小 控制窗口 拷贝和粘贴数据 用鼠标输入命令 得到帮助 使用命令窗口 滚动窗口 键入命令 重呼命令 使用运行时宏 将命令窗口的历史缓存保存到文件 相关命令 控制代码窗口 读信息 在代码窗口键入命令 使用本地窗口 控制本地窗口 扩展和分解堆栈 相关命令 使用观察窗口 控制观察窗口 设定观察表达式 读信息 扩展和分解类型表达式 相关命令 使用寄存器窗口 控制寄存器窗口 读信息 编辑寄存器和标志 相关命令 使用数据窗口 控制数据窗口 读信息 改变内存地址和格式 编辑内存 辅助表达式 相关命令 第六章 使用SoftICE跟踪错误时调试多个程序 跟踪错误 Ring-3 32保护模式(Win32程序) Ring-0 驱动代码(内核模式设备驱动程序) Ring-3 16保护模式(16Win程序) 地址内容 使用INT 0x41 .DOT命令 理解从R-3到R-0的转变 第七章 使用断点 第八章 ----------------------------------------------------------- (...很累人那!今天就这些了吧.因为我也是读一些翻译一些,所以有些"向前引用 "的名词术语不知道要如何解释其意义.应该读完再翻译比较好...不过那个时候我 又开学了...呜...一点时间也没有了!) 第七章 使用断点 介绍 SoftICE所支持的断点类型 断点选项 执行断点 内存断点 中断断点 I/O断点 窗口消息断点 理解断点的含义 虚断点 设置断点活动 条件断点 条件断点计数功能 在条件表达式中使用本地变量 在条件断点里引用堆栈 参考 多重断点 所用时间 断点统计 在表达式中引用断点 维护断点 使用内嵌断点 第八章 使用表达式 表达式 操作符 操作符优先级 形成表达式 表达式类型 定制类型 取得符号的数值 间接使用符号 第九章 装入系统组件符号 装入由DLL和EXE文件导出的符号表 使用未命名的入口点
OllyDbg发行版是一个ZIP压缩包,只要解压运行OllyDbg.exe即可。运行OllyDbg打开进程,主窗口显示反汇编清单。各窗口的外观属性如:“标题栏(bar)、字体(font)”等在右键菜单"界面选项(appearance)"里控制 1.代码窗口   代码窗口(OllyDbg帮助文件自称反编汇窗口)显示被调试程序的代码。他有四个列   地址/Address(虚拟地址) HEX 数据/HEX dump(机器码) 反编汇/Diassassembly(汇编代码) 注释/Comment(注释)   最后一列注释(Comment)显示相关API参数或运行简表,非常有用,有点类似于IDA Pro。   在代码窗口(地址行,不是列标题)双击时完成动作。   ●地址(Address)列:显示相对被双击地址的地址,再次双击返回标准地址模式;   ●HEX 数据(HEX dump)列:设置或取消无条件断点,按F2键也能设置断点;   ●反编汇(Diassassembly)列:调试编辑器,可直接修改汇编代码;   ●注释(Comment)列:允许增加或编辑注释。   代码窗口允许浏览、分析、搜索和修改代码,保存改变到可执行文件,设置断点等。相关弹出式菜单包括100多项。 2.信息窗口(Information window)   动态跟踪时,与指令相关的各寄存器的值、API函数调用提示、跳转提示等信息显示。 3.数据窗口   以十六进制或内存方式显示文件在内容中的数据,类似于softICE的数据窗口。要显示数据可单击右键"转到→表达式(Go to→expression)"或按Ctrl+G键打开地址窗口,输入地址。 4.寄存器(Registers window)   显示CPU各寄存器的值,支持浮点(FPU)、MMX,3DNow!寄存器,可以单击鼠标右键切换。 5.堆栈窗口(Stack window)   堆栈窗口非常重要,各API函数、子程序等都利用它传递参数、变量等。OllyDbg堆栈窗口功能强大。如果传递的参数都是字符串,OllyDbg会在注释里直接将其显示出来,再也不用像SoftICE那样经常用D命令查看内存数据了。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧