冥界3大法王 发表于 2024-3-12 09:23

函数原形有两种,用两种方式,都没有编译错误,但有调试错误!

函数原形有两种,用两种方式,都没有编译错误,但有调试错误!

https://static.52pojie.cn/static/image/hrline/1.gif

如图所示:
{BRIDGE_IMPEXP void}    procedure DbgScriptLoad(const filename: PAChar); cdecl; external x32_BRIDGE;

https://static.52pojie.cn/static/image/hrline/1.gif
这个说完了,还有下一个scriptload 加上你的脚本路径
然后用DbgCmdExec来执行
函数原形是下面这样的:
{BRIDGE_IMPEXP bool}    function DbgCmdExec(const cmd: PAChar): Boolean; cdecl; external x32_BRIDGE;
被加载的路径若是直接写的话,都能成x32dbg/x64dbg成功加载脚本。


procedure TMainForm.加载脚本Click(Sender: TObject);
begin
DbgScriptLoad(PAnsiChar(UTF8String('scriptload "' + 牛逼路径 + '\TestScript1.txt' + '"')));
Clipboard.AsText := 'scriptload "' + 牛逼路径 + '\TestScript1.txt"';
DbgScriptLoad(PAnsiChar(牛逼路径 + '\TestScript1.txt'));

DbgCmdExec(PAnsiChar(format('%s',)));
DbgCmdExec(PAnsiChar(Clipboard.AsText));
DbgCmdExec(PAnsiChar('scriptload ' + QuotedStr(牛逼路径 + '\TestScript1.txt')));
DbgCmdExec(PAnsiChar('scriptload "' + 牛逼路径 + '\TestScript1.txt' + '"'));
end;
一种错误是:


还有一种错误是这个:


那该如何解决呢?   目前生成剪贴板方式有点不爽啊。

冥界3大法王 发表于 2024-3-12 09:30

问题总结:
1)直接加载全路径,没问题
2)剪贴板生成的命令和路径也没有问题
3)双引号还是最好加上的

A.尝试过PAnsiChar
B.尝试过PAChar
C.尝试过UTF8String
D.尝试过format
均失败告终。

lies2014 发表于 2024-3-12 11:47

看起来还是编码转换的问题,x32dbg API 要求的是 PAChar,Delphi 11 采用 UTF-8,如果含有中文,你要先将 UTF-8 转成 GBK 才行
你可以将字符串指针赋给 PAnsiChar s,然后用 MessageBox(0, s, Nil, MB_OK) 测试一下,如果不能正常显示就是编码问题

冥界3大法王 发表于 2024-3-12 12:24

本帖最后由 冥界3大法王 于 2024-3-12 12:26 编辑

lies2014 发表于 2024-3-12 11:47
看起来还是编码转换的问题,x32dbg API 要求的是 PAChar,Delphi 11 采用 UTF-8,如果含有中文,你要先将 U ...@lies2014

RichViewEdit1.SaveText('TestScript1.txt', 0, 65001);                //坑爹的控件,有时需要clean后再生成编码才正确!
Clipboard.AsText := 'scriptload "' + '\TestScript1.txt"';         //第二行多余,以做第二手准备!
DbgCmdExec(PAnsiChar(UTF8Encode(Clipboard.AsText)));

受输出log和msg的启发,一并解决了!

vanness900326 发表于 2024-3-12 17:07

法王 有问题求助{:1_937:}
页: [1]
查看完整版本: 函数原形有两种,用两种方式,都没有编译错误,但有调试错误!