首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变函数返回值

变函数返回值
EN

Stack Overflow用户
提问于 2011-04-17 22:26:50
回答 1查看 1.3K关注 0票数 1

我有一个.net应用程序,它执行COM互操作并调用一些本机库API。其中一个API返回了一些出乎意料的数据,给我带来了麻烦。我正在寻找某种方法来强制托管API的返回值。这并不能解决我的问题,但可以帮我缩小一些范围。我正在简化下面的事情。

记住所有这些,假设我的托管类名为MyClass,它有两个方法ParentMethod()和ChildMethod()。ParentMethod调用ChildMethod,后者在内部调用这些本地API。ChildMethod本身返回一个bool。

在通过Windbg进入我的应用程序之后,我首先运行了!dump堆-type MyClass命令,该命令提供了以下输出

0:027>!垃圾堆-type MyClass 地址MT大小 0ac7e7e4 04ac5030 100 共计0对象 统计数字: MT计数TotalSize类名 04ac50301100 MyNamespace.MyClass 共计1件物品

然后,我运行以下命令,试图获取该类中方法的地址。

0:027> !dumpmt -md 04ac5030 EEClass: 04ac1b20 模块: 04ac49c8 名称: MyNamespace.MyClass mdToken: 02000002 档案: MyAssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null BaseSize: 0x64 ComponentSize: 0x0 VTable的插槽: 61 IFaces在IFaceMap中的数量:4 MethodDesc表 条目MethodDesc JIT名称 04b20270 04ac4fd0 JIT MyNamespace.MyClass..ctor() 04b20230 04ac4ffc JIT MyNamespace.MyClass..cctor() 04acc081 04ac4fd8无MyNamespace.MyClass.ParentMethod() 04acc085 04ac4fe4无MyNamespace.MyClass.ChildMethod() 04b202c0.004ac4ff0jit MyNamespace.MyClass.InitializeComponent()

我找到了纳文的博客条目,他描述了沿着同一条线做某事的一些技巧,但我不知道从这里应该采取什么具体步骤。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-17 22:41:36

以下是简单的步骤

  1. bp 04acc085 -这是ChildMethod
  2. 当断点命中时,发出命令bp poi(@esp),该命令在返回寄存器上设置断点。
  3. 当第二个断点命中时,可以使用r eax=00000001将该值更改为true。eax寄存器将返回值存储在x86中。

或者另一种方法是bp 04acc085 "gu;r eax=00000001;gc",它将在一行中执行相同的操作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5696877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档