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

解决方案 »

  1.   

    我跟踪的是Windows程序, 程序A调用程序B, 我现在是想知道B的命令行参数, 但是试了各种办法没有成功。
      

  2.   

    这就简单了,调常当父程序调用子程序时,是将程序的参数由右到左的顺序推入堆栈中,再将下一个指令的地址进栈。所以用 pbx createprocess拦截后用 
    32位程序:  d ss:esp
    16位程序:  d ss:sp再通过堆栈的找到createprocess的第二个参数就行了嘛
      

  3.   

    多谢老兄,可是:
    :BPX CREATEFILEA
    倒是触发了,可是如何找到文件名称的,几个PUSH传递的参数里都没有发现还有,要触发createprocess应该包括哪个DLL库,我把范例里面的都包括了,可是还不行啊,老是标志没有定义:(老兄,再帮帮忙
      

  4.   

    真是对不起 是 createprocessa 少了一个 'a'在用了 pbx createfilea 激活softice后,用 d ss:esp+4 createfilea 显示第一个参数的地址,例如:
    63 24 6a 00 00 00 00 00 ...
    第一个参数的地址就为 006a2463
    用 d 6a2463  就可看见 createfilea的第一个参数了。
    createprocessa也是一样的
      

  5.   

    注意,是 d ss:esp+4
    不是 d ss:esp+4 creatfilea
      

  6.   

    非常谢谢老兄!
    我用
    :bpx createfilea
    拦截到了几个文件名称,可是一个主要的库文件名称没有拦截到:(
    是不是还有其它的API也可以创建文件?:bpx createprocessa
    没有拦截成功,这是一个运行在win3.11上的程序A,它调用了一个文件B.EXE,我用task命令发现它被调用,而且执行B,则提示缺少命令行,我用
    :bpx winexec
    也没有拦截到
    难道也还有其它的API也可调用一个可执行文件?再次向您请教
      

  7.   

    1.对于16位程序可试一试 OpenFile 或是 _lopen
      16位程序运行其它程序还有 Yield() 函数2.要想得到程序的命令行还有一种方法:
      在每个程序加载的时候都会调用 GetCommandLine(),
      还可试一试 pbx getcommandline
      

  8.   

    大师就是大师
    我用yield()截取到了调用程序,知道了调用的程序名称,那如何知道命令行呢?:pbx getcommandlinea没有触发:(在跟踪打开文件名称时:
    :bpx OpenFile 或
    :bpx _lopen
    还是没有触发,是不是在操作一些文件的时候可以不调用这些API或函数呢?大师出马,一个顶两,再帮帮我这个菜鸟
      

  9.   

    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
      

  10.   

    又打错了,
    32位offset是用
    d ss:esp+4
    d ss:esp+8
    d ss:esp+12
    ...
      

  11.   

    终于找到了命令行参数
    在yield触发之后,在ss:sp+12的地址再加上0x69是参数值。
    感激不尽!可是库文件一直没有触发出来,
    明显是在操作库文件时,ReadFile触发正常
    是不是有可能从ReadFile找到文件名称,也就是根据文件句柄找到文件名称?继续请教大师:)