keystone-engine / keystone

Keystone assembler framework: Core (Arm, Arm64, Hexagon, Mips, PowerPC, Sparc, SystemZ & X86) + bindings
http://www.keystone-engine.org
GNU General Public License v2.0
2.3k stars 456 forks source link

pushw imm #207

Open fvrmatteo opened 8 years ago

fvrmatteo commented 8 years ago

Wrong output for: "push word 0x1122". Expected: "66 68 22 11". Kstool output: "68 22 11 00 00". I then tried with: "pushw 0x1122". Excepted: "66 68 22 11". Kstool output: KS_ERR_ASM_MNEMONICFAIL.

If the mnemonic "pushw" is not going to be supported, I think parsing correctly the size specification, like "word" in "push word 0x1122" is the fix. It all depends on the first byte 0x66.

aquynh commented 8 years ago

see related issue https://github.com/keystone-engine/keystone/issues/10. it seems the fix for it is just partially correct.

can you send a PR to add your case to x86_issue10.py ?

pushw is an invalid mnemonic

Summus-31c04089c3cd80 commented 7 years ago

Maybe I'm wrong but the only file modified to "fix" it is the regress test "x86_issue10.py" and it fails.

I have this commit : commit 95b7212a8514dff1861245300857accec34a120f (HEAD -> master, origin/master, origin/HEAD)

And this is the result of regress.py :

Ran 77 tests in 0.069s FAILED (failures=7, errors=1)

This is for x86_issue10.py :

FAIL: runTest (main.TestX86)

Traceback (most recent call last): File "./x86_issue10.py", line 23, in runTest self.assertEqual(encoding3, [ 0x66, 0x68, 0x34, 0x12 ]) AssertionError: Lists differ: [104, 52, 18, 0, 0] != [102, 104, 52, 18]

First differing element 0: 104 102

First list contains 1 additional elements. First extra element 4: 0

-[104, 52, 18, 0, 0] +[102, 104, 52, 18]

Summus-31c04089c3cd80 commented 6 years ago

Up

Recurse-blip commented 3 years ago

I've also encountered the issue on my side.

I'm using the latest keystone engine bindings in a python script to compile 32 bit assembly.

The issue can also be reproduced with this keystone engine online demo : https://alexaltea.github.io/keystone.js/

For example compiling the following assembly : push word 0x1234;

gives the following ouput : 68 34 12 00 00

but it should be : 66 68 34 12

Let me know if you guys need help for this issue.

Best regards

xirantian commented 7 months ago

I discovered this issue again while running my code on version 0.9.2. Has the problem been addressed in #578, and is it planned to be resolved in which version? Looking forward to your reply.