日志断点中的 Windbg 'as' 命令

逆向工程 风袋
2021-07-05 11:25:46

我想在调试器打开一个已知文件时使用windbg. 由于$scmp不接受直接地址,我必须使用aswindbgalias 命令)。因此,我在CreateFileA以下位置放置了一个条件断点

bu Kernel32!CreateFileA "as /ma ${/v:fName} poi(esp+4);.echo ${fName};...;g"

它总是打印相同的(第一个)文件名。我也试过脚本文件

bu ... "$>< bpCmd"
bu ... "$$>< bpCmd"

bpCmd 内容:

as /ma ${/v:fName} poi(esp+4);
.echo ${fName};
...
g;

它也没有奏效。

那么,为什么as在日志断点中不起作用?

1个回答

The alias needs to be evaluated 每次击中断点时,
它只会打印旧别名
以强制别名评估`将 .echo 和其他命令包含在.block{} 中

crefil:\>dir /b
CreateFile.cpp    
crefil:\>type CreateFile.cpp
#include <stdio.h>
#include <windows.h>
int main (void)
{
    PWIN32_FIND_DATA lpFindFileData = 
            (PWIN32_FIND_DATA) calloc(1 , sizeof( WIN32_FIND_DATA));
    FILE *fp;
    errno_t err;
    if (lpFindFileData)
    {
        HANDLE hFind = FindFirstFile("*.*",lpFindFileData);
        if ( hFind != INVALID_HANDLE_VALUE )
        {
            do
            {
                printf("%s\n",lpFindFileData->cFileName);
                if ( (err = fopen_s(&fp,lpFindFileData->cFileName,"rb") ) == 0 )

                    if (fp)
                        fclose(fp);
            }while( ( FindNextFile(hFind,lpFindFileData) ) != FALSE );
            FindClose(hFind);
            free(lpFindFileData);
        }
    }
    return 0;
}

如windbg条件断点

crefil:>cdb -c "bp kernel32!CreateFileA \"as /ma ${/v:fname} poi(@esp+4);.block { .echo fname };gc\";g;q" CreateFile.exe

0:000> cdb: Reading initial command 'bp kernel32!CreateFileA "as /ma ${/v:fname}
 poi(@esp+4);.block { .echo fname };gc";g;q'
.
..
CreateFile.cpp
CreateFile.exe
CreateFile.obj
CreateFile.pdb
 vc100.pdb
quit: