【发布时间】:2018-03-12 14:41:47
【问题描述】:
给定一个简单的 .NET 程序(来自https://docs.microsoft.com/en-us/dotnet/framework/interop/platform-invoke-examples):
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.Remoting;
class Sample
{
static void Main(string[] args)
{
MessageBox(IntPtr.Zero, "TEST", "TEST", 0);
}
[DllImport("user32.dll", SetLastError=true)]
private static extern int MessageBox(IntPtr hwnd, String text, String title, uint type);
}
程序调用本机 Win32 函数MessageBox。
我想在 WinDbg 中的本机函数上设置一个断点。对于 API 文档,函数位于 user32.dll 中,因此我使用 bp 在 user32!MessageBox 处设置断点。
我运行 WinDbg,文件/打开可执行文件,打开程序的 exe,进入调试器。然后我执行了bp user32!MessageBoxW,但它说我:“无法解析bp表达式'user32!MessageBoxW',添加延迟bp”。
因此,如果我继续使用g,我将不会进入断点并出现错误:
"断点 0 的偏移表达式求值失败。 检查无效符号或语法错误。”
更新:
请参阅已接受的问题 - user32!MessageBox 不正确,应使用 user32!MessageBoxW。该消息“无法解析bp表达式'user32!MessageBoxW',添加延迟的bp”完全可以,只是说还没有加载任何符号。
【问题讨论】:
-
使用
user32!.MessageBoxW或user32!.MessageBoxA-user32!MessageBox不存在
标签: c# .net winapi pinvoke windbg