- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试获取 __declspec(naked)
函数的原始字节,但是 memcpy
正在返回我不期望的字节。
我使用了调试器来检查字节/地址。一切看起来都很好,但 memcpy
的结果产生了不同的、看似不变的字节。
void __declspec(naked) widget_click_fix_asm()
{
__asm {
nop
call patched_widget_handler
}
}
void test_patch()
{
char buf[7];
::memcpy(&buf, &widget_click_fix_asm, 7);
}
在 VS 调试器中,在我执行的中间窗口中:
&widget_click_fix_asm
0x778816f0
导航到该内存位置显示以下字节:
778816F0 90
778816F1 FF 15 38 91 88 77
我希望 buf
是以下字节的容器:
[0x90, 0xFF, 0x15, 0x38, 0x91, 0x88, 0x77]
每次我测试时,buf
都包含以下常量字节:
[0xE9, 0xD8, 0x05, 0x00, 0x00, 0xE9, 0x63]
为什么我没有得到预期的字节数?
最佳答案
您所观察到的是由于incremental linking在 MSVC 的 Debug模式下。 widget_click_fix_asm
的地址实际上不是函数本身,而是 JMP Thunk Table 中的 JMP 指令地址。 .该表用于将新版本的函数修补到现有的可执行文件中。这是通过将新函数写入具有足够空间的可执行文件的空闲区域,然后使用新地址更新 JMP thunk 表来完成的。这有助于 Visual Studio 中的编辑和继续调试功能。
在您的示例中,您对 memcpy
的调用最终将部分 JMP Thunk 表复制到 buf
而不是函数本身。您可能希望考虑关闭增量链接功能以获得您正在寻找的所需行为。
关于c++ - __declspec naked 上的 memcpy 返回意外的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57534123/
在与我的同事的谈话中,他提到他不小心在生产中部署了一个“裸体 where 子句”。 什么是“裸 where 条款”? 最佳答案 裸 WHERE 子句将指代始终返回 true 的内容 WHERE 1 =
在我的应用程序中,我需要设置回调,其唯一职责是更新与单独对象中已完成事件关联的状态,以便以后可以查询。但是,由于 API 的设计方式,我不能保证在事件完成时另一个对象仍将拥有,所以我需要存储一个指向该
我正在考虑将为 Windows 编写的脚本引擎移植到 Linux;它适用于 Winamp 的可视化平台 AVS。我不确定目前是否有可能。据我所知,代码正在获取 C 函数 nseel_asm_atan
__declspec(naked) void printfive() { int i = 5; printf("%i\n", i); } 出于某种原因这段代码有效,但我不明白 i 存储在哪
参见 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html#distributive-condi
当您搜索词 Apex Domains在 Google 搜索中,您获得的首页是 https://help.github.com/en/articles/about-supported-custom-do
我试图在给定一个嵌套列表的情况下获取每个元素的长度;我也想摆脱重复的长度。 例如,嵌套列表 [[1],[1,2],[4..5]] 应该给我 [1,2]。 我可以在交互中通过 nub ( map 长度
如何从 PowerShell 写入标准错误,或捕获以下错误: 错误消息显示为错误(真正写入标准错误,以便 TeamCity 和 Octopus 将其视为错误) 没有堆栈跟踪垃圾扰乱我美丽、简洁的错误消
不确定如何表达这个,但我的意思是有类似 My name isRadu 的东西而不是 My name isRadu .显然不是 h1 的最佳用法元素,但我认为可以原谅。那么,所有 HTML 都应该用适当
问题很简单。 我的代码是: __attribute__ ((naked)) void function(int arg1, int arg2, int arg3) { _asm("push {r
最近我在泛型的上下文中读到一个术语“裸类型约束”。它是做什么的意思?我们在哪里使用它? 最佳答案 顺便说一句,令我感到奇怪的是,这个有点淫秽的术语竟然出现在了 MSDN 文档中。我们当然不会在 C#
我正在尝试获取 __declspec(naked) 函数的原始字节,但是 memcpy 正在返回我不期望的字节。 我使用了调试器来检查字节/地址。一切看起来都很好,但 memcpy 的结果产生了不同的
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
乍一看,Naked Objects看起来非常有前途,因为它们允许快速创建具有基本 UI 的完整系统,然后进行完善。 有没有人有使用任何 .net Naked Objects 框架的实际经验? 我应该如
我有一个 Entity由 lib 和 Registry 定义的类这是管理使用 map 注册到它的实体的类。 我正在尝试做的事情: //Registry Signature void Registry:
我有 Naked 通知 FindBugs 警告。下面是我的代码。 synchronized (this) { this.notify(); } “this”是“public c
尝试一个简单的递归函数,它接受一个数字,以某种方式拆分它,并且只有在拆分后的数字彼此相等时才应该返回它。 package main import "fmt" func split(sum int) (
gcc/g++ 中 __declspec( naked ) 的等价物是什么? __declspec( naked ) 实际上是用来声明一个没有尾声和序言的函数。 最佳答案 在某些体系结构上,gcc 支
$ clang --version clang version 5.0.0 (tags/RELEASE_500/final) . CC ../../py/nlrthumb.c ../../py/nl
我正在 Microsoft Azure 上运行 Django 应用程序,需要将所有流量 301 重定向到单个安全 www 域,即 来自: http://example.com https://exam
我是一名优秀的程序员,十分优秀!