我打开了windbg并使用“打开可执行文件”选项来打开我的可执行文件。我具有传递给可执行文件的命令行参数,以使其崩溃。但是,当我尝试将它们输入到the Arguments box in the Open Executable dialog时,我最多只能输入518个字符:
如何将参数设置为长度超过518个字符的字符串来启动命令?
我正在使用WinDbg 10.0.17134.12 AMD64。
答案 0 :(得分:1)
您能否以任意长度的字符串作为参数独立运行可执行文件?我对此表示怀疑。
%PATH%也不能超过一定长度
无论如何,请查看kernelbase系统dll中的这些全局变量
这些将命令行argv [0]保留为argv [n]
缓冲区(unicode或ansi)在堆中分配
也许您可以尝试将地址交换到其他指向您任意字符串的内存中
0:000> ds KERNELBASE!BaseAnsiCommandLine
004c5b18 "cmdarg.exe aaaaaaaaaaa"
0:000> dS KERNELBASE!BaseUnicodeCommandLine
004c511c "cmdarg.exe aaaaaaaaaaa"
:\>cat cmdarg.cpp
#include <stdio.h>
void main (int , char *argv[]) {
printf("%s\n" , argv[1]);
}
:\>cmdarg.exe
(null)
:\>cmdarg.exe a
a
:\>cmdarg.exe aaaaaaaaaaaaaaa
aaaaaaaaaaaaaaa
:\>windbg cmdarg.exe aaaa
和windbg中的类似内容
我不知道这是否可以在您的特定场景中使用 也只有在使用GetCommandline变体时才使用global 不确定crt是否在内部使用它
0:000> ? cmdarg
Evaluate expression: 19333120 = 01270000
0:000> ds KERNELBASE!BaseAnsiCommandLine
002d5b08 "cmdarg.exe aaaa"
0:000> db KERNELBASE!BaseAnsiCommandLine l8
759c4788 0f 00 10 00 08 5b 2d 00 .....[-.
0:000> eb KERNELBASE!BaseAnsiCommandLine
759c4788 0f fe
fe
759c4789 00 00
00
759c478a 10 ff
ff
759c478b 00 00
00
759c478c 08 00
00
759c478d 5b 03
03
759c478e 2d 27
27
759c478f 00 01
01
759c4790 20
0:000> db KERNELBASE!BaseAnsiCommandLine l8
759c4788 fe 00 ff 00 00 03 27 01 ......'.
0:000> ds KERNELBASE!BaseAnsiCommandLine
01270300 ""
0:000> eza 1270300 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0:000> ds KERNELBASE!BaseAnsiCommandLine
01270300 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
01270320 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
01270340 "aaaaaaaaaa"