Assembly Ubuntu16.04让libx86emu x86emu演示程序正常工作?

Assembly Ubuntu16.04让libx86emu x86emu演示程序正常工作?,assembly,x86,emulation,Assembly,X86,Emulation,有人知道如何让libx86emu x86emu演示程序工作吗 ./x86emu演示-l 0-s 0xB4测试.obj 我需要能够执行与上述示例类似的x86机器代码。libx86emu解码并执行前三条指令,然后错误地解码第四条指令。我只需要能够模拟32位x86,我不需要任何操作系统支持 只有大约一半的libx86emu x86test回归测试通过 这是实际的执行跟踪 libx86emu“Steffen Winterfeldt”的作者 更新:libx86emu/demo/x86emu demo.

有人知道如何让libx86emu x86emu演示程序工作吗

./x86emu演示-l 0-s 0xB4测试.obj

我需要能够执行与上述示例类似的x86机器代码。libx86emu解码并执行前三条指令,然后错误地解码第四条指令。我只需要能够模拟32位x86,我不需要任何操作系统支持

只有大约一半的libx86emu x86test回归测试通过

这是实际的执行跟踪

libx86emu“Steffen Winterfeldt”的作者 更新:libx86emu/demo/x86emu demo.c 因此,它现在有一个“32位模式”命令行参数

以前,代码以默认的16位模式执行

libx86emu“Steffen Winterfeldt”的作者 更新:libx86emu/demo/x86emu demo.c 因此,它现在有一个“32位模式”命令行参数


以前,代码以默认的16位模式执行

如果我不得不猜测的话,libx86emu正在一个虚拟的16位实模式环境中模拟您的代码,因此它很可能将前4条指令解码为
push-bp
push-cx
mov-word[di-0x4],0x0
add[bx+si],al
push-bp
mov-bp,sp
push-cx
mov-word[di-0x4],0x0
添加[bx+si]这也是我的猜想。我将搜索代码来看看如何强制32位模式。Test.obj是二进制的OBJ文件,它解码到下面显示的32位指令。它是用Visual C++编译器生成的。我只想在32位模式下运行。我不需要操作系统的任何功能。——@米莎。elPetch看来我们的怀疑可能会被eip 000000 B7到eip 000000 BD的增量确认为两个字节,而不是四个字节。-是的,我一直认为是这样。我的问题是,为什么需要使用libx86emu。你是想将其集成到操作系统中,还是只是想运行任意32位代码?如果是,为什么不只是为您的操作系统编译它(Linux?Windows?我想知道libx86emu是否是您试图解决的其他问题的错误解决方案?(an)@MichaelPetch我需要运行任意32位X86代码(使用Visual Studio编译)在UBUNTU下。我正在制作一个分析32位X86机器代码的程序。Visual Studio生成更简单的代码,具有原始“C”代码的语义本质。GCC生成的代码更复杂。模拟代码不需要任何操作系统支持。
Test.obj  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
000000B0  00 0A 00 00 55 8B EC 51 C7 45 FC 00 00 00 00 8B 
000000C0  45 FC 50 E8 09 00 00 00 83 C4 04 33 C0 8B E5 5D 
000000D0  C3 55 8B EC B8 01 00 00 00 5D C3 00 07 00 00 00 

B4: 55                      push   ebp
B5: 8b ec                   mov    ebp,esp
B7: 51                      push   ecx
B8: c7 45 fc 00 00 00 00    mov    DWORD PTR [ebp-0x4],0x0
BF: 8b 45 fc                mov    eax,DWORD PTR [ebp-0x4]
C2: 50                      push   eax
C3: e8 09 00 00 00          call   0x1d
C8: 83 c4 04                add    esp,0x4
CB: 33 c0                   xor    eax,eax
CD: 8b e5                   mov    esp,ebp
CF: 5d                      pop    ebp
D0: c3                      ret
D1: 55                      push   ebp
D2: 8b ec                   mov    ebp,esp
D4: b8 01 00 00 00          mov    eax,0x1
D9: 5d                      pop    ebp
DA: c3                      ret
eax 00000000, ebx 00000000, ecx 00000000, edx 00000000
esi 00000000, edi 00000000, ebp 00000000, esp 00000000
cs 0000, ss 0000, ds 0000, es 0000, fs 0000, gs 0000
eip 000000b4, eflags 00000002
x [000000b4] = 55
w [0000fffe] = 0000
0 0000:00b4 55                       push bp

eax 00000000, ebx 00000000, ecx 00000000, edx 00000000
esi 00000000, edi 00000000, ebp 00000000, esp 0000fffe
cs 0000, ss 0000, ds 0000, es 0000, fs 0000, gs 0000
eip 000000b5, eflags 00000002
x [000000b5] = 8b
x [000000b6] = ec
1 0000:00b5 8bec                     mov bp,sp

eax 00000000, ebx 00000000, ecx 00000000, edx 00000000
esi 00000000, edi 00000000, ebp 0000fffe, esp 0000fffe
cs 0000, ss 0000, ds 0000, es 0000, fs 0000, gs 0000
eip 000000b7, eflags 00000002
x [000000b7] = 51
w [0000fffc] = 0000
2 0000:00b7 51                       push cx

eax 00000000, ebx 00000000, ecx 00000000, edx 00000000
esi 00000000, edi 00000000, ebp 0000fffe, esp 0000fffc
cs 0000, ss 0000, ds 0000, es 0000, fs 0000, gs 0000
eip 000000b8, eflags 00000002
x [000000b8] = c7
x [000000b9] = 45
x [000000ba] = fc
x [000000bb] = 0000
w [0000fffc] = 0000
3 0000:00b8 c745fc0000               mov [di-04],0000

eax 00000000, ebx 00000000, ecx 00000000, edx 00000000
esi 00000000, edi 00000000, ebp 0000fffe, esp 0000fffc
cs 0000, ss 0000, ds 0000, es 0000, fs 0000, gs 0000
eip 000000bd, eflags 00000002
x [000000bd] = 00
x [000000be] = 00
r [00000000] = 4c
w [00000000] = 4c
4 0000:00bd 0000                     add [bx+si],al
* no proper code