gpt4 book ai didi

c - libopcodes : get the size of a instruction

转载 作者:太空宇宙 更新时间:2023-11-04 03:57:10 26 4
gpt4 key购买 nike

我必须找出我在内存中的一条指令的大小(实际上,我在内存中有一个小代码段并且想获得第一条指令的大小)。我花了一些时间才找到 libopcodes 和 libbfd。我把标题改成了红色,并试图想出一个简单的解决方案,但似乎我误解了一些东西,因为程序总是崩溃:

int main(int argc, char **argv) {
disassemble_info *dis = malloc(sizeof(*dis));
assert(dis != NULL);

dis->arch = bfd_arch_i386;
dis->read_memory_func = buffer_read_memory;
dis->buffer_length = 64;
dis->buffer = malloc(dis->buffer_length);
memset(dis->buffer, 0x90, dis->buffer_length);
disassemble_init_for_target(dis);

int instr_size = print_insn_i386(0, dis);

printf("instruction size is %d\n", instr_size);

return 0;
}

预期结果是指令大小为 1 (nop)。

编辑:

对不起大家,我是个笨蛋。

memset(dis, 0, sizeof(*dis));

最佳答案

您可以窃取 Linux 内核中的一些代码。如果复制到用户模式程序中,它应该可以正常工作。

看看 arch/x86/lib 和 arch/x86/tools那里有一个操作码映射文件,以及一个读取它以在名为 innat.c 的文件中生成一个表的 awk 脚本。那里还有一些其他文件使用该表来实现解码器。

确定指令大小就足够了。

当然,这假设您对 GPL 没有问题。

关于c - libopcodes : get the size of a instruction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15351259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com