metasm 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/Gemfile +3 -3
  4. data/Rakefile +1 -1
  5. data/cortex.yaml +17 -0
  6. data/metasm/cpu/arm64/decode.rb +87 -11
  7. data/metasm/cpu/arm64/decompile.rb +142 -0
  8. data/metasm/cpu/arm64/opcodes.rb +53 -23
  9. data/metasm/cpu/arm64.rb +1 -0
  10. data/metasm/cpu/dwarf/debug.rb +39 -0
  11. data/metasm/cpu/dwarf/decode.rb +124 -0
  12. data/metasm/cpu/dwarf/decompile.rb +212 -0
  13. data/metasm/cpu/dwarf/encode.rb +49 -0
  14. data/metasm/cpu/dwarf/main.rb +37 -0
  15. data/metasm/cpu/dwarf/opcodes.rb +107 -0
  16. data/metasm/cpu/dwarf.rb +11 -0
  17. data/metasm/cpu/ia32/debug.rb +8 -0
  18. data/metasm/cpu/ia32/decode.rb +25 -1
  19. data/metasm/cpu/ia32/decompile.rb +205 -342
  20. data/metasm/cpu/mips/decode.rb +1 -1
  21. data/metasm/cpu/ppc/decode.rb +1 -1
  22. data/metasm/cpu/sh4/decode.rb +1 -1
  23. data/metasm/cpu/x86_64/decompile.rb +68 -0
  24. data/metasm/cpu/x86_64.rb +1 -0
  25. data/metasm/decode.rb +14 -0
  26. data/metasm/decompile.rb +51 -27
  27. data/metasm/disassemble.rb +24 -15
  28. data/metasm/dynldr.rb +23 -4
  29. data/metasm/encode.rb +11 -0
  30. data/metasm/exe_format/elf.rb +60 -2
  31. data/metasm/exe_format/elf_decode.rb +201 -6
  32. data/metasm/exe_format/shellcode.rb +39 -0
  33. data/metasm/gui/dasm_decomp.rb +1 -0
  34. data/metasm/os/emulator.rb +7 -0
  35. data/metasm/parse_c.rb +1 -1
  36. data/metasm.gemspec +1 -2
  37. data/metasm.rb +1 -1
  38. data/samples/disassemble-gui.rb +27 -11
  39. data/samples/disassemble.rb +9 -12
  40. data/samples/emudbg.rb +1 -1
  41. data/samples/factorize-headers-elfimports.rb +4 -1
  42. data/samples/lindebug.rb +16 -2
  43. data/tests/shellcode.rb +111 -0
  44. metadata +19 -102
  45. checksums.yaml.gz.sig +0 -3
  46. data.tar.gz.sig +0 -0
  47. metadata.gz.sig +0 -0
@@ -0,0 +1,111 @@
1
+ # This file is part of Metasm, the Ruby assembly manipulation suite
2
+ # Copyright (C) 2006-2009 Yoann GUILLOT
3
+ #
4
+ # Licence is LGPL, see LICENCE in the top-level directory
5
+
6
+
7
+ require 'test/unit'
8
+ require 'metasm'
9
+
10
+ class TestShellcode < Test::Unit::TestCase
11
+ @@cpu = Metasm::Ia32.new
12
+
13
+ def assert_equal(a, b) super(b, a) end
14
+
15
+ def bin(s)
16
+ if s.respond_to?(:force_encoding)
17
+ s.force_encoding('BINARY')
18
+ else
19
+ s
20
+ end
21
+ end
22
+
23
+ def assemble(src)
24
+ Metasm::Shellcode.assemble(@@cpu, src).encode_string
25
+ end
26
+
27
+ # ---- define_data ----
28
+
29
+ def test_define_data_basic
30
+ assert_equal(Metasm::Shellcode.define_data("ABCD".b), 'db 0x41, 0x42, 0x43, 0x44')
31
+ end
32
+
33
+ def test_define_data_empty
34
+ assert_equal(Metasm::Shellcode.define_data("".b), '')
35
+ end
36
+
37
+ def test_define_data_nil
38
+ assert_equal(Metasm::Shellcode.define_data(nil), '')
39
+ end
40
+
41
+ def test_define_data_full_range
42
+ assert_equal(Metasm::Shellcode.define_data("\x00\x01\x9f\xa0\xff".b),
43
+ 'db 0x00, 0x01, 0x9f, 0xa0, 0xff')
44
+ end
45
+
46
+ def test_define_data_roundtrip_printable
47
+ src = Metasm::Shellcode.define_data("ABCD".b)
48
+ assert_equal(assemble(src), bin("ABCD"))
49
+ end
50
+
51
+ def test_define_data_roundtrip_full_range
52
+ bytes = (0..255).map(&:chr).join.b
53
+ src = Metasm::Shellcode.define_data(bytes)
54
+ assert_equal(assemble(src), bin(bytes))
55
+ end
56
+
57
+ # ---- define_cstring ----
58
+
59
+ def test_define_cstring_basic
60
+ assert_equal(Metasm::Shellcode.define_cstring("ABCD".b), 'db "ABCD", 0')
61
+ end
62
+
63
+ def test_define_cstring_empty
64
+ assert_equal(Metasm::Shellcode.define_cstring("".b), 'db 0')
65
+ end
66
+
67
+ def test_define_cstring_nil
68
+ assert_equal(Metasm::Shellcode.define_cstring(nil), 'db 0')
69
+ end
70
+
71
+ def test_define_cstring_escape_quote
72
+ assert_equal(Metasm::Shellcode.define_cstring("a\"b".b), 'db "a\"b", 0')
73
+ end
74
+
75
+ def test_define_cstring_escape_backslash
76
+ # input: one backslash; expected output: backslash-backslash inside string literal
77
+ assert_equal(Metasm::Shellcode.define_cstring("a\\b".b), 'db "a\\\\b", 0')
78
+ end
79
+
80
+ def test_define_cstring_mixed_printable_and_binary
81
+ assert_equal(Metasm::Shellcode.define_cstring("AB\x05CD".b),
82
+ 'db "AB", 0x05, "CD", 0')
83
+ end
84
+
85
+ def test_define_cstring_single_high_byte
86
+ assert_equal(Metasm::Shellcode.define_cstring("\xff".b), 'db 0xff, 0')
87
+ end
88
+
89
+ def test_define_cstring_roundtrip_printable
90
+ src = Metasm::Shellcode.define_cstring("ABCD".b)
91
+ assert_equal(assemble(src), bin("ABCD\x00"))
92
+ end
93
+
94
+ def test_define_cstring_roundtrip_with_binary
95
+ input = "AB\x05CD".b
96
+ src = Metasm::Shellcode.define_cstring(input)
97
+ assert_equal(assemble(src), bin(input + "\x00"))
98
+ end
99
+
100
+ def test_define_cstring_roundtrip_escapes
101
+ input = "a\"b\\c".b
102
+ src = Metasm::Shellcode.define_cstring(input)
103
+ assert_equal(assemble(src), bin(input + "\x00"))
104
+ end
105
+
106
+ def test_define_cstring_roundtrip_high_byte
107
+ input = "\xff".b
108
+ src = Metasm::Shellcode.define_cstring(input)
109
+ assert_equal(assemble(src), bin(input + "\x00"))
110
+ end
111
+ end
metadata CHANGED
@@ -1,109 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metasm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoann Guillot
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
14
- A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
15
- Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
16
- MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
17
- A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
18
- hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
19
- RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
20
- gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
21
- KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
22
- QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
23
- XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
24
- DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
25
- LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
26
- RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
27
- jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
28
- 6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
29
- mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
30
- Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
31
- WD9f
32
- -----END CERTIFICATE-----
33
- - |
34
- -----BEGIN CERTIFICATE-----
35
- MIIElDCCA3ygAwIBAgIOSBtqBybS6D8mAtSCWs0wDQYJKoZIhvcNAQELBQAwTDEg
36
- MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2Jh
37
- bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTYwNjE1MDAwMDAwWhcNMjQw
38
- NjE1MDAwMDAwWjBaMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu
39
- di1zYTEwMC4GA1UEAxMnR2xvYmFsU2lnbiBDb2RlU2lnbmluZyBDQSAtIFNIQTI1
40
- NiAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjYVVI6kfU6/J
41
- 7TbCKbVu2PlC9SGLh/BDoS/AP5fjGEfUlk6Iq8Zj6bZJFYXx2Zt7G/3YSsxtToZA
42
- F817ukcotdYUQAyG7h5LM/MsVe4hjNq2wf6wTjquUZ+lFOMQ5pPK+vldsZCH7/g1
43
- LfyiXCbuexWLH9nDoZc1QbMw/XITrZGXOs5ynQYKdTwfmOPLGC+MnwhKkQrZ2TXZ
44
- g5J2Yl7fg67k1gFOzPM8cGFYNx8U42qgr2v02dJsLBkwXaBvUt/RnMngDdl1EWWW
45
- 2UO0p5A5rkccVMuxlW4l3o7xEhzw127nFE2zGmXWhEpX7gSvYjjFEJtDjlK4Prau
46
- niyX/4507wIDAQABo4IBZDCCAWAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQWMBQG
47
- CCsGAQUFBwMDBggrBgEFBQcDCTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW
48
- BBQPOueslJF0LZYCc4OtnC5JPxmqVDAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpj
49
- move4t0bvDA+BggrBgEFBQcBAQQyMDAwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw
50
- Mi5nbG9iYWxzaWduLmNvbS9yb290cjMwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov
51
- L2NybC5nbG9iYWxzaWduLmNvbS9yb290LXIzLmNybDBjBgNVHSAEXDBaMAsGCSsG
52
- AQQBoDIBMjAIBgZngQwBBAEwQQYJKwYBBAGgMgFfMDQwMgYIKwYBBQUHAgEWJmh0
53
- dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEB
54
- CwUAA4IBAQAVhCgM7aHDGYLbYydB18xjfda8zzabz9JdTAKLWBoWCHqxmJl/2DOK
55
- XJ5iCprqkMLFYwQL6IdYBgAHglnDqJQy2eAUTaDVI+DH3brwaeJKRWUtTUmQeGYy
56
- DrBowLCIsI7tXAb4XBBIPyNzujtThFKAzfCzFcgRCosFeEZZCNS+t/9L9ZxqTJx2
57
- ohGFRYzUN+5Q3eEzNKmhHzoL8VZEim+zM9CxjtEMYAfuMsLwJG+/r/uBAXZnxKPo
58
- 4KvcM1Uo42dHPOtqpN+U6fSmwIHRUphRptYCtzzqSu/QumXSN4NTS35nfIxA9gcc
59
- sK8EBtz4bEaIcpzrTp3DsLlUo7lOl8oU
60
- -----END CERTIFICATE-----
61
- - |
62
- -----BEGIN CERTIFICATE-----
63
- MIIE5jCCA86gAwIBAgIMKDuO03uv6RWXR1uAMA0GCSqGSIb3DQEBCwUAMFoxCzAJ
64
- BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTAwLgYDVQQDEydH
65
- bG9iYWxTaWduIENvZGVTaWduaW5nIENBIC0gU0hBMjU2IC0gRzMwHhcNMTYwOTEz
66
- MTgxMDIyWhcNMTkxMTExMTUxNTM4WjBgMQswCQYDVQQGEwJVUzEWMBQGA1UECBMN
67
- TWFzc2FjaHVzZXR0czEPMA0GA1UEBxMGQm9zdG9uMRMwEQYDVQQKEwpSYXBpZDcg
68
- TExDMRMwEQYDVQQDEwpSYXBpZDcgTExDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
69
- MIIBCgKCAQEAl0HeC0FzN1BJ4nQkxsBng3peS9Bdi9rpSGx+g0Ximd+M/7twmund
70
- bzn2JPbNK/Gp/rq/SytrNSLcUzcbH/0z5Ltyw1/jQsGtRBrns0NZSRXqupQDW5R6
71
- HFpaIAl3OdsesmIQc/fm0uhh8dkfHVo7UsZO/TeCPoy0uHXTI6aFBPzMMsdz+gf3
72
- cCCLsnNKQh/T2Q/jwBs3NTPoyza/pPZcvGogKcWCeNihTO5Rn1Fc71sMHSjQsDtn
73
- 1fWGKYGi0qjvZ4lpGM9IFZMTbySKHbPLhhHnBOoV7avGemdky3AEsUeiT+6DY0P1
74
- IydBy24uVNhGATglME1ttlT4Eme/to0M6wIDAQABo4IBpDCCAaAwDgYDVR0PAQH/
75
- BAQDAgeAMIGUBggrBgEFBQcBAQSBhzCBhDBIBggrBgEFBQcwAoY8aHR0cDovL3Nl
76
- Y3VyZS5nbG9iYWxzaWduLmNvbS9jYWNlcnQvZ3Njb2Rlc2lnbnNoYTJnM29jc3Au
77
- Y3J0MDgGCCsGAQUFBzABhixodHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vZ3Nj
78
- b2Rlc2lnbnNoYTJnMzBWBgNVHSAETzBNMEEGCSsGAQQBoDIBMjA0MDIGCCsGAQUF
79
- BwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAIBgZn
80
- gQwBBAEwCQYDVR0TBAIwADA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmds
81
- b2JhbHNpZ24uY29tL2dzY29kZXNpZ25zaGEyZzMuY3JsMBMGA1UdJQQMMAoGCCsG
82
- AQUFBwMDMB0GA1UdDgQWBBSm8RBpBC/cK9VmxzO2+RWnacN8CTAfBgNVHSMEGDAW
83
- gBQPOueslJF0LZYCc4OtnC5JPxmqVDANBgkqhkiG9w0BAQsFAAOCAQEANVO3uYQl
84
- h8iicbaXE3odrL+kXXmeeNgt4BD3x7GKAVIVixtwBS6pvrshjc1LN0tm3ruiv8oy
85
- cq4FiEmVUXZejSRvVVtABeWdZWo+lJ8NxCBUEYYmnMrjgFIbGiEbBsg7PGtyeQsA
86
- 5Wbg7Lx889mS1tKfQBcPif8EjpTiXNfMiywmpaMYmvm+yQgzrRLDbjz6JV0Rc5Ga
87
- WChka+LTPnMtsWJuFM8ka8icMeS28/nAGERdewxWvz+DeAPMORdTJ7aqb6+Y9xuz
88
- G+Hmcg1v810agasPdoydE0RTVZgEOOMoQ07qu7JFXVWZ9ZQpHT7qJATWL/b2csFG
89
- 8mVuTXnyJOKRJA==
90
- -----END CERTIFICATE-----
91
- date: 2019-04-08 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2026-05-20 00:00:00.000000000 Z
92
12
  dependencies:
93
- - !ruby/object:Gem::Dependency
94
- name: bundler
95
- requirement: !ruby/object:Gem::Requirement
96
- requirements:
97
- - - "~>"
98
- - !ruby/object:Gem::Version
99
- version: '1.7'
100
- type: :development
101
- prerelease: false
102
- version_requirements: !ruby/object:Gem::Requirement
103
- requirements:
104
- - - "~>"
105
- - !ruby/object:Gem::Version
106
- version: '1.7'
107
13
  - !ruby/object:Gem::Dependency
108
14
  name: rake
109
15
  requirement: !ruby/object:Gem::Requirement
@@ -149,6 +55,7 @@ files:
149
55
  - README
150
56
  - Rakefile
151
57
  - TODO
58
+ - cortex.yaml
152
59
  - doc/code_organisation.txt
153
60
  - doc/const_missing.txt
154
61
  - doc/core/DynLdr.txt
@@ -186,6 +93,7 @@ files:
186
93
  - metasm/cpu/arm64.rb
187
94
  - metasm/cpu/arm64/debug.rb
188
95
  - metasm/cpu/arm64/decode.rb
96
+ - metasm/cpu/arm64/decompile.rb
189
97
  - metasm/cpu/arm64/encode.rb
190
98
  - metasm/cpu/arm64/main.rb
191
99
  - metasm/cpu/arm64/opcodes.rb
@@ -205,6 +113,13 @@ files:
205
113
  - metasm/cpu/dalvik/decode.rb
206
114
  - metasm/cpu/dalvik/main.rb
207
115
  - metasm/cpu/dalvik/opcodes.rb
116
+ - metasm/cpu/dwarf.rb
117
+ - metasm/cpu/dwarf/debug.rb
118
+ - metasm/cpu/dwarf/decode.rb
119
+ - metasm/cpu/dwarf/decompile.rb
120
+ - metasm/cpu/dwarf/encode.rb
121
+ - metasm/cpu/dwarf/main.rb
122
+ - metasm/cpu/dwarf/opcodes.rb
208
123
  - metasm/cpu/ebpf.rb
209
124
  - metasm/cpu/ebpf/debug.rb
210
125
  - metasm/cpu/ebpf/decode.rb
@@ -278,6 +193,7 @@ files:
278
193
  - metasm/cpu/x86_64/compile_c.rb
279
194
  - metasm/cpu/x86_64/debug.rb
280
195
  - metasm/cpu/x86_64/decode.rb
196
+ - metasm/cpu/x86_64/decompile.rb
281
197
  - metasm/cpu/x86_64/encode.rb
282
198
  - metasm/cpu/x86_64/main.rb
283
199
  - metasm/cpu/x86_64/opcodes.rb
@@ -455,12 +371,13 @@ files:
455
371
  - tests/mips.rb
456
372
  - tests/parse_c.rb
457
373
  - tests/preprocessor.rb
374
+ - tests/shellcode.rb
458
375
  - tests/x86_64.rb
459
376
  homepage: http://metasm.cr0.org
460
377
  licenses:
461
378
  - LGPL-2.1
462
379
  metadata: {}
463
- post_install_message:
380
+ post_install_message:
464
381
  rdoc_options: []
465
382
  require_paths:
466
383
  - "."
@@ -475,9 +392,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
475
392
  - !ruby/object:Gem::Version
476
393
  version: '0'
477
394
  requirements: []
478
- rubyforge_project:
479
- rubygems_version: 2.6.8
480
- signing_key:
395
+ rubygems_version: 3.4.19
396
+ signing_key:
481
397
  specification_version: 4
482
398
  summary: Metasm is a cross-architecture assembler, disassembler, linker, and debugger.
483
399
  test_files:
@@ -493,4 +409,5 @@ test_files:
493
409
  - tests/mips.rb
494
410
  - tests/parse_c.rb
495
411
  - tests/preprocessor.rb
412
+ - tests/shellcode.rb
496
413
  - tests/x86_64.rb
checksums.yaml.gz.sig DELETED
@@ -1,3 +0,0 @@
1
- ��=���^�� 8�W�
2
- ��*�O?2�!�O�)��}�e���-��ǹ��@s$�9�F`lo���ՙ�3�.O�o9S�����1b���~6����G���p(�
3
- V���F�4��G9a-H()s�ٌ�<�>SyHLSY�7�@�w�}38QP�Z��Bl�5��8�t�����0��Q�P�=� pfj\p���>芉�?�ḡ��POţ�ι7Ա���RQD(mi�1.K5»K��P��y��i.h\:�a�>
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
Binary file