Initial commit

This commit is contained in:
Duncan Ogilvie
2023-05-27 13:35:39 +02:00
commit 5185d5a208
7 changed files with 1242 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
.idea/
target/
debug/
**/*.rs.bk
+3
View File
@@ -0,0 +1,3 @@
[submodule "icicle-emu"]
path = icicle-emu
url = https://github.com/mrexodia/icicle-emu
Generated
+808
View File
@@ -0,0 +1,808 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "addr2line"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
dependencies = [
"cpp_demangle",
"fallible-iterator",
"gimli",
"memmap2",
"object",
"rustc-demangle",
"smallvec",
]
[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ahash"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
dependencies = [
"cfg-if",
"once_cell",
"version_check",
]
[[package]]
name = "anyhow"
version = "1.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84"
[[package]]
name = "bstr"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5"
dependencies = [
"memchr",
"serde",
]
[[package]]
name = "bumpalo"
version = "3.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
[[package]]
name = "bytemuck"
version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "cpp_demangle"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c76f98bdfc7f66172e6c7065f981ebb576ffc903fe4c0561d9f0c2509226dc6"
dependencies = [
"cfg-if",
]
[[package]]
name = "cranelift"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50babaf4da30fd349e1b913760300266143535f15a0b7be7ce1ce9efafa8ff5e"
dependencies = [
"cranelift-codegen",
"cranelift-frontend",
]
[[package]]
name = "cranelift-bforest"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70"
dependencies = [
"cranelift-entity",
]
[[package]]
name = "cranelift-codegen"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220"
dependencies = [
"bumpalo",
"cranelift-bforest",
"cranelift-codegen-meta",
"cranelift-codegen-shared",
"cranelift-entity",
"cranelift-isle",
"gimli",
"hashbrown 0.13.2",
"log",
"regalloc2",
"smallvec",
"target-lexicon",
]
[[package]]
name = "cranelift-codegen-meta"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da"
dependencies = [
"cranelift-codegen-shared",
]
[[package]]
name = "cranelift-codegen-shared"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8"
[[package]]
name = "cranelift-entity"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0"
[[package]]
name = "cranelift-frontend"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d"
dependencies = [
"cranelift-codegen",
"log",
"smallvec",
"target-lexicon",
]
[[package]]
name = "cranelift-isle"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba"
[[package]]
name = "cranelift-jit"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ca96b05988aa057eda09a817a6e31915fabd7f476b513123aff08053cd193dd"
dependencies = [
"anyhow",
"cranelift-codegen",
"cranelift-entity",
"cranelift-module",
"cranelift-native",
"libc",
"log",
"region",
"target-lexicon",
"wasmtime-jit-icache-coherence",
"windows-sys",
]
[[package]]
name = "cranelift-module"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5112c0be9cc5da064e0620570d67852f11ce44f2e572a58ecf7f11df73978b8"
dependencies = [
"anyhow",
"cranelift-codegen",
]
[[package]]
name = "cranelift-native"
version = "0.95.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00"
dependencies = [
"cranelift-codegen",
"libc",
"target-lexicon",
]
[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
dependencies = [
"cfg-if",
]
[[package]]
name = "crunchy"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
[[package]]
name = "fallible-iterator"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
[[package]]
name = "fixedbitset"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "flate2"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
dependencies = [
"crc32fast",
"miniz_oxide",
]
[[package]]
name = "fxhash"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
dependencies = [
"byteorder",
]
[[package]]
name = "gimli"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
dependencies = [
"fallible-iterator",
"indexmap",
"stable_deref_trait",
]
[[package]]
name = "half"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
dependencies = [
"crunchy",
]
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
dependencies = [
"ahash",
]
[[package]]
name = "icicle-cpu"
version = "0.1.0"
dependencies = [
"addr2line",
"bitflags 2.3.1",
"bytemuck",
"half",
"hashbrown 0.13.2",
"icicle-mem",
"object",
"pcode",
"sleigh-runtime",
"target-lexicon",
"tracing",
]
[[package]]
name = "icicle-jit"
version = "0.2.0"
dependencies = [
"cranelift",
"cranelift-codegen",
"cranelift-jit",
"cranelift-module",
"cranelift-native",
"icicle-cpu",
"memoffset",
"pcode",
"target-lexicon",
"tracing",
]
[[package]]
name = "icicle-linux"
version = "0.1.0"
dependencies = [
"bitflags 2.3.1",
"bstr",
"bytemuck",
"icicle-cpu",
"object",
"pcode",
"sleigh-runtime",
"target-lexicon",
"tracing",
]
[[package]]
name = "icicle-mem"
version = "0.3.0"
dependencies = [
"tracing",
]
[[package]]
name = "icicle-unicorn"
version = "0.1.0"
dependencies = [
"icicle-cpu",
"icicle-vm",
"pcode",
]
[[package]]
name = "icicle-vm"
version = "0.2.0"
dependencies = [
"anyhow",
"icicle-cpu",
"icicle-jit",
"icicle-linux",
"object",
"pcode",
"serde",
"serde-xml-rs",
"sleigh-compile",
"sleigh-runtime",
"target-lexicon",
"tracing",
]
[[package]]
name = "indexmap"
version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown 0.12.3",
]
[[package]]
name = "libc"
version = "0.2.144"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
[[package]]
name = "log"
version = "0.4.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
dependencies = [
"cfg-if",
]
[[package]]
name = "mach"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
dependencies = [
"libc",
]
[[package]]
name = "memchr"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "memmap2"
version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
dependencies = [
"libc",
]
[[package]]
name = "memoffset"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
dependencies = [
"autocfg",
]
[[package]]
name = "miniz_oxide"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
dependencies = [
"adler",
]
[[package]]
name = "object"
version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
dependencies = [
"crc32fast",
"flate2",
"hashbrown 0.13.2",
"indexmap",
"memchr",
"ruzstd",
]
[[package]]
name = "once_cell"
version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
[[package]]
name = "pcode"
version = "0.2.0"
[[package]]
name = "petgraph"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
dependencies = [
"fixedbitset",
"indexmap",
]
[[package]]
name = "pin-project-lite"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
[[package]]
name = "proc-macro2"
version = "1.0.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
dependencies = [
"proc-macro2",
]
[[package]]
name = "regalloc2"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621"
dependencies = [
"fxhash",
"log",
"slice-group-by",
"smallvec",
]
[[package]]
name = "region"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0"
dependencies = [
"bitflags 1.3.2",
"libc",
"mach",
"winapi",
]
[[package]]
name = "rustc-demangle"
version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
[[package]]
name = "ruzstd"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a15e661f0f9dac21f3494fe5d23a6338c0ac116a2d22c2b63010acd89467ffe"
dependencies = [
"byteorder",
"thiserror",
"twox-hash",
]
[[package]]
name = "serde"
version = "1.0.163"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde-xml-rs"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb3aa78ecda1ebc9ec9847d5d3aba7d618823446a049ba2491940506da6e2782"
dependencies = [
"log",
"serde",
"thiserror",
"xml-rs",
]
[[package]]
name = "serde_derive"
version = "1.0.163"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "sleigh-compile"
version = "0.3.0"
dependencies = [
"pcode",
"petgraph",
"sleigh-parse",
"sleigh-runtime",
]
[[package]]
name = "sleigh-parse"
version = "0.3.0"
[[package]]
name = "sleigh-runtime"
version = "0.1.0"
dependencies = [
"pcode",
"sleigh-parse",
]
[[package]]
name = "slice-group-by"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7"
[[package]]
name = "smallvec"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "syn"
version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "target-lexicon"
version = "0.12.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
[[package]]
name = "thiserror"
version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tracing"
version = "0.1.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
dependencies = [
"cfg-if",
"pin-project-lite",
"tracing-core",
]
[[package]]
name = "tracing-core"
version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
[[package]]
name = "twox-hash"
version = "1.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
dependencies = [
"cfg-if",
"static_assertions",
]
[[package]]
name = "unicode-ident"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "wasmtime-jit-icache-coherence"
version = "8.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd"
dependencies = [
"cfg-if",
"libc",
"windows-sys",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets",
]
[[package]]
name = "windows-targets"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "xml-rs"
version = "0.8.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d8f380ae16a37b30e6a2cf67040608071384b1450c189e61bea3ff57cde922d"
+11
View File
@@ -0,0 +1,11 @@
[package]
name = "icicle-unicorn"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
icicle-cpu = { path = "icicle-emu/icicle-cpu" }
icicle-vm = { path = "icicle-emu/icicle-vm" }
pcode = { path = "icicle-emu/sleigh/pcode" }
Submodule
+1
Submodule icicle-emu added at 9c97c94c8c
+356
View File
@@ -0,0 +1,356 @@
use std::thread::sleep;
use icicle_vm::cpu::{Environment, ExceptionCode};
use icicle_vm::cpu::mem::{AllocLayout, Mapping, perm};
use icicle_vm::linux::LinuxCpu;
use icicle_vm::VmExit;
use crate::rawenv::RawEnvironment;
use std::time::{Duration, SystemTime};
mod rawenv;
fn main() {
// Setup the CPU state for the target triple
let mut cpu_config = icicle_vm::cpu::Config::from_target_triple("x86_64-none");
cpu_config.enable_jit = true;
cpu_config.enable_recompilation = false;
let mut vm = icicle_vm::build(&cpu_config).unwrap();
let shellcode: [u8; 2780] =
[
0x48, 0x89, 0x5C, 0x24, 0x08, 0x48, 0x89, 0x74, 0x24, 0x10, 0x48, 0x89,
0x7C, 0x24, 0x18, 0x55, 0x48, 0x8B, 0xEC, 0x48, 0x83, 0xEC, 0x10, 0xB8,
0x63, 0x72, 0x65, 0x61, 0xC7, 0x45, 0xF0, 0x37, 0x13, 0x00, 0x00, 0x41,
0xBA, 0x62, 0x69, 0x6E, 0x67, 0xC7, 0x45, 0xF4, 0x69, 0x00, 0x00, 0x00,
0xC7, 0x45, 0xF8, 0x20, 0x04, 0x00, 0x00, 0xBB, 0x80, 0x96, 0x98, 0x00,
0xC7, 0x45, 0xFC, 0x66, 0x06, 0x00, 0x00, 0xBE, 0x40, 0x6E, 0xDE, 0x8D,
0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x33, 0xC9, 0x45,
0x33, 0xC0, 0x45, 0x8D, 0x59, 0x04, 0x66, 0x0F, 0x1F, 0x44, 0x00, 0x00,
0x41, 0x83, 0xE0, 0x03, 0x8B, 0xC8, 0xC1, 0xE1, 0x04, 0x8B, 0xD0, 0xC1,
0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x03, 0xD0, 0x41,
0x03, 0xC9, 0x41, 0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E, 0x33, 0xD1, 0x45,
0x8B, 0xC1, 0x44, 0x03, 0xD2, 0x41, 0x83, 0xE0, 0x03, 0x41, 0x8B, 0xCA,
0x41, 0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41,
0x8B, 0xC9, 0x48, 0xC1, 0xE9, 0x0B, 0x41, 0x03, 0xD2, 0x83, 0xE1, 0x03,
0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B,
0xC8, 0x8B, 0xD0, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42,
0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9, 0x03, 0xD0, 0x33, 0xD1, 0x41,
0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E, 0x44, 0x03, 0xD2, 0x45, 0x8B, 0xC1,
0x41, 0x8B, 0xCA, 0x41, 0x83, 0xE0, 0x03, 0xC1, 0xE1, 0x04, 0x41, 0x8B,
0xD2, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48, 0xC1, 0xE9,
0x0B, 0x41, 0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41,
0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xC8, 0x8B, 0xD0, 0xC1, 0xE1,
0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41,
0x03, 0xC9, 0x03, 0xD0, 0x33, 0xD1, 0x41, 0x81, 0xC1, 0xB9, 0x79, 0x37,
0x9E, 0x44, 0x03, 0xD2, 0x45, 0x8B, 0xC1, 0x41, 0x8B, 0xCA, 0x41, 0x8B,
0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9,
0x48, 0xC1, 0xE9, 0x0B, 0x41, 0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C,
0x8D, 0xF0, 0x41, 0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xD0, 0x8B,
0xC8, 0xC1, 0xEA, 0x05, 0xC1, 0xE1, 0x04, 0x41, 0x83, 0xE0, 0x03, 0x33,
0xD1, 0x03, 0xD0, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9, 0x41,
0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E, 0x33, 0xD1, 0x45, 0x8B, 0xC1, 0x44,
0x03, 0xD2, 0x41, 0x83, 0xE0, 0x03, 0x41, 0x8B, 0xCA, 0x41, 0x8B, 0xD2,
0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48,
0xC1, 0xE9, 0x0B, 0x41, 0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D,
0xF0, 0x41, 0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xC8, 0x8B, 0xD0,
0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85,
0xF0, 0x41, 0x03, 0xC9, 0x03, 0xD0, 0x33, 0xD1, 0x41, 0x81, 0xC1, 0xB9,
0x79, 0x37, 0x9E, 0x44, 0x03, 0xD2, 0x45, 0x8B, 0xC1, 0x41, 0x8B, 0xCA,
0x41, 0x83, 0xE0, 0x03, 0xC1, 0xE1, 0x04, 0x41, 0x8B, 0xD2, 0xC1, 0xEA,
0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48, 0xC1, 0xE9, 0x0B, 0x41, 0x03,
0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xC9, 0x33,
0xD1, 0x03, 0xC2, 0x8B, 0xC8, 0x8B, 0xD0, 0xC1, 0xE1, 0x04, 0xC1, 0xEA,
0x05, 0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9, 0x03,
0xD0, 0x33, 0xD1, 0x41, 0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E, 0x44, 0x03,
0xD2, 0x45, 0x8B, 0xC1, 0x41, 0x8B, 0xCA, 0x41, 0x8B, 0xD2, 0xC1, 0xE1,
0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48, 0xC1, 0xE9,
0x0B, 0x41, 0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41,
0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xD0, 0x8B, 0xC8, 0xC1, 0xEA,
0x05, 0xC1, 0xE1, 0x04, 0x33, 0xD1, 0x03, 0xD0, 0x41, 0x83, 0xE0, 0x03,
0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9, 0x41, 0x81, 0xC1, 0xB9,
0x79, 0x37, 0x9E, 0x33, 0xD1, 0x45, 0x8B, 0xC1, 0x44, 0x03, 0xD2, 0x41,
0x83, 0xE0, 0x03, 0x41, 0x8B, 0xCA, 0x41, 0x8B, 0xD2, 0xC1, 0xE1, 0x04,
0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48, 0xC1, 0xE9, 0x0B,
0x41, 0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03,
0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xC8, 0x8B, 0xD0, 0xC1, 0xE1, 0x04,
0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03,
0xC9, 0x03, 0xD0, 0x33, 0xD1, 0x41, 0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E,
0x44, 0x03, 0xD2, 0x45, 0x8B, 0xC1, 0x41, 0x83, 0xE0, 0x03, 0x41, 0x8B,
0xCA, 0xC1, 0xE1, 0x04, 0x41, 0x8B, 0xD2, 0xC1, 0xEA, 0x05, 0x33, 0xD1,
0x41, 0x8B, 0xC9, 0x48, 0xC1, 0xE9, 0x0B, 0x41, 0x03, 0xD2, 0x83, 0xE1,
0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2,
0x8B, 0xC8, 0x8B, 0xD0, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1,
0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9, 0x03, 0xD0, 0x33, 0xD1,
0x41, 0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E, 0x44, 0x03, 0xD2, 0x45, 0x8B,
0xC1, 0x41, 0x8B, 0xCA, 0x41, 0x83, 0xE0, 0x03, 0xC1, 0xE1, 0x04, 0x41,
0x8B, 0xD2, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48, 0xC1,
0xE9, 0x0B, 0x41, 0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0,
0x41, 0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xD0, 0x8B, 0xC8, 0xC1,
0xEA, 0x05, 0xC1, 0xE1, 0x04, 0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0,
0x03, 0xD0, 0x41, 0x03, 0xC9, 0x33, 0xD1, 0x41, 0x81, 0xC1, 0xB9, 0x79,
0x37, 0x9E, 0x44, 0x03, 0xD2, 0x45, 0x8B, 0xC1, 0x41, 0x83, 0xE0, 0x03,
0x41, 0x8B, 0xCA, 0xC1, 0xE1, 0x04, 0x41, 0x8B, 0xD2, 0xC1, 0xEA, 0x05,
0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48, 0xC1, 0xE9, 0x0B, 0x41, 0x03, 0xD2,
0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xC9, 0x33, 0xD1,
0x03, 0xC2, 0x8B, 0xC8, 0x8B, 0xD0, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05,
0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9, 0x03, 0xD0,
0x33, 0xD1, 0x41, 0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E, 0x44, 0x03, 0xD2,
0x45, 0x8B, 0xC1, 0x41, 0x8B, 0xCA, 0x41, 0x83, 0xE0, 0x03, 0xC1, 0xE1,
0x04, 0x41, 0x8B, 0xD2, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9,
0x48, 0xC1, 0xE9, 0x0B, 0x41, 0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C,
0x8D, 0xF0, 0x41, 0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xC8, 0x8B,
0xD0, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B, 0x4C,
0x85, 0xF0, 0x41, 0x03, 0xC9, 0x03, 0xD0, 0x33, 0xD1, 0x41, 0x81, 0xC1,
0xB9, 0x79, 0x37, 0x9E, 0x44, 0x03, 0xD2, 0x45, 0x8B, 0xC1, 0x41, 0x8B,
0xCA, 0x41, 0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0x41, 0x83, 0xE0, 0x03, 0xC1,
0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48, 0xC1, 0xE9, 0x0B, 0x41,
0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xC9,
0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xD0, 0x8B, 0xC8, 0xC1, 0xEA, 0x05, 0xC1,
0xE1, 0x04, 0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9,
0x03, 0xD0, 0x33, 0xD1, 0x44, 0x03, 0xD2, 0x41, 0x81, 0xC1, 0xB9, 0x79,
0x37, 0x9E, 0x45, 0x8B, 0xC1, 0x41, 0x8B, 0xCA, 0xC1, 0xE1, 0x04, 0x41,
0x83, 0xE0, 0x03, 0x41, 0x8B, 0xD2, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41,
0x8B, 0xC9, 0x41, 0x03, 0xD2, 0x48, 0xC1, 0xE9, 0x0B, 0x83, 0xE1, 0x03,
0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B,
0xC8, 0x8B, 0xD0, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42,
0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9, 0x03, 0xD0, 0x33, 0xD1, 0x41,
0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E, 0x44, 0x03, 0xD2, 0x45, 0x8B, 0xC1,
0x41, 0x83, 0xE0, 0x03, 0x41, 0x8B, 0xCA, 0xC1, 0xE1, 0x04, 0x41, 0x8B,
0xD2, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x41, 0x03, 0xD2,
0x48, 0xC1, 0xE9, 0x0B, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41,
0x03, 0xC9, 0x33, 0xD1, 0x03, 0xC2, 0x8B, 0xC8, 0x8B, 0xD0, 0xC1, 0xEA,
0x05, 0xC1, 0xE1, 0x04, 0x33, 0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41,
0x03, 0xC9, 0x03, 0xD0, 0x33, 0xD1, 0x41, 0x81, 0xC1, 0xB9, 0x79, 0x37,
0x9E, 0x44, 0x03, 0xD2, 0x45, 0x8B, 0xC1, 0x41, 0x8B, 0xCA, 0x41, 0x83,
0xE0, 0x03, 0xC1, 0xE1, 0x04, 0x41, 0x8B, 0xD2, 0xC1, 0xEA, 0x05, 0x33,
0xD1, 0x41, 0x8B, 0xC9, 0x41, 0x03, 0xD2, 0x48, 0xC1, 0xE9, 0x0B, 0x83,
0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xC9, 0x33, 0xD1, 0x03,
0xC2, 0x8B, 0xD0, 0x8B, 0xC8, 0xC1, 0xEA, 0x05, 0xC1, 0xE1, 0x04, 0x33,
0xD1, 0x42, 0x8B, 0x4C, 0x85, 0xF0, 0x41, 0x03, 0xC9, 0x03, 0xD0, 0x33,
0xD1, 0x41, 0x81, 0xC1, 0xB9, 0x79, 0x37, 0x9E, 0x44, 0x03, 0xD2, 0x45,
0x8B, 0xC1, 0x41, 0x8B, 0xD2, 0xC1, 0xEA, 0x05, 0x41, 0x8B, 0xCA, 0xC1,
0xE1, 0x04, 0x33, 0xD1, 0x41, 0x8B, 0xC9, 0x48, 0xC1, 0xE9, 0x0B, 0x41,
0x03, 0xD2, 0x83, 0xE1, 0x03, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xC9,
0x33, 0xD1, 0x03, 0xC2, 0x49, 0x83, 0xEB, 0x01, 0x0F, 0x85, 0x06, 0xFB,
0xFF, 0xFF, 0x44, 0x8B, 0xDE, 0x4C, 0x8B, 0xCE, 0xBF, 0x04, 0x00, 0x00,
0x00, 0x66, 0x66, 0x66, 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
0x49, 0xC1, 0xE9, 0x0B, 0x41, 0x8B, 0xCA, 0xC1, 0xE1, 0x04, 0x41, 0x83,
0xE1, 0x03, 0x41, 0x8B, 0xD2, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xD2, 0x41, 0x03, 0xCB, 0x41, 0x81, 0xC3,
0x47, 0x86, 0xC8, 0x61, 0x33, 0xD1, 0x45, 0x8B, 0xCB, 0x2B, 0xC2, 0x49,
0xC1, 0xE9, 0x0B, 0x41, 0x83, 0xE1, 0x03, 0x8B, 0xC8, 0xC1, 0xE1, 0x04,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x49,
0xC1, 0xE9, 0x0B, 0x8B, 0xC8, 0xC1, 0xE1, 0x04, 0x41, 0x83, 0xE1, 0x03,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x8B,
0xC8, 0x44, 0x8B, 0xC0, 0xC1, 0xE1, 0x04, 0x41, 0xC1, 0xE8, 0x05, 0x44,
0x33, 0xC1, 0x41, 0x8B, 0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B,
0x54, 0x8D, 0xF0, 0x41, 0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0,
0x41, 0x8B, 0xD2, 0x41, 0x8B, 0xCA, 0xC1, 0xEA, 0x05, 0xC1, 0xE1, 0x04,
0x33, 0xD1, 0x49, 0xC1, 0xE9, 0x0B, 0x41, 0x03, 0xD2, 0x41, 0x83, 0xE1,
0x03, 0x42, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x81, 0xC3,
0x47, 0x86, 0xC8, 0x61, 0x33, 0xD1, 0x45, 0x8B, 0xCB, 0x2B, 0xC2, 0x49,
0xC1, 0xE9, 0x0B, 0x41, 0x83, 0xE1, 0x03, 0x8B, 0xC8, 0xC1, 0xE1, 0x04,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x49,
0xC1, 0xE9, 0x0B, 0x8B, 0xC8, 0xC1, 0xE1, 0x04, 0x41, 0x83, 0xE1, 0x03,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x8B,
0xC8, 0x44, 0x8B, 0xC0, 0xC1, 0xE1, 0x04, 0x41, 0xC1, 0xE8, 0x05, 0x44,
0x33, 0xC1, 0x41, 0x8B, 0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B,
0x54, 0x8D, 0xF0, 0x41, 0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0,
0x41, 0x8B, 0xD2, 0x41, 0x8B, 0xCA, 0xC1, 0xEA, 0x05, 0xC1, 0xE1, 0x04,
0x33, 0xD1, 0x41, 0x03, 0xD2, 0x49, 0xC1, 0xE9, 0x0B, 0x41, 0x83, 0xE1,
0x03, 0x42, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x81, 0xC3,
0x47, 0x86, 0xC8, 0x61, 0x33, 0xD1, 0x45, 0x8B, 0xCB, 0x2B, 0xC2, 0x49,
0xC1, 0xE9, 0x0B, 0x41, 0x83, 0xE1, 0x03, 0x8B, 0xC8, 0xC1, 0xE1, 0x04,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x49,
0xC1, 0xE9, 0x0B, 0x8B, 0xC8, 0xC1, 0xE1, 0x04, 0x41, 0x83, 0xE1, 0x03,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x8B,
0xC8, 0x49, 0xC1, 0xE9, 0x0B, 0xC1, 0xE1, 0x04, 0x44, 0x8B, 0xC0, 0x41,
0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B, 0xCB, 0x83, 0xE1, 0x03,
0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41, 0x03, 0xD3, 0x44, 0x33,
0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xD2, 0x41, 0x8B, 0xCA, 0xC1, 0xEA,
0x05, 0xC1, 0xE1, 0x04, 0x33, 0xD1, 0x41, 0x03, 0xD2, 0x41, 0x83, 0xE1,
0x03, 0x42, 0x8B, 0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x81, 0xC3,
0x47, 0x86, 0xC8, 0x61, 0x33, 0xD1, 0x45, 0x8B, 0xCB, 0x2B, 0xC2, 0x49,
0xC1, 0xE9, 0x0B, 0x41, 0x83, 0xE1, 0x03, 0x8B, 0xC8, 0xC1, 0xE1, 0x04,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x49,
0xC1, 0xE9, 0x0B, 0x8B, 0xC8, 0xC1, 0xE1, 0x04, 0x41, 0x83, 0xE1, 0x03,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x8B,
0xC8, 0x49, 0xC1, 0xE9, 0x0B, 0xC1, 0xE1, 0x04, 0x44, 0x8B, 0xC0, 0x41,
0xC1, 0xE8, 0x05, 0x41, 0x83, 0xE1, 0x03, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xD2, 0x41,
0x8B, 0xCA, 0xC1, 0xEA, 0x05, 0xC1, 0xE1, 0x04, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x2B,
0xC2, 0x41, 0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x8B, 0xC8, 0xC1, 0xE1,
0x04, 0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x45,
0x8B, 0xCB, 0x44, 0x03, 0xC0, 0x49, 0xC1, 0xE9, 0x0B, 0x41, 0x83, 0xE1,
0x03, 0x41, 0x8B, 0xCB, 0x83, 0xE1, 0x03, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x49,
0xC1, 0xE9, 0x0B, 0x8B, 0xC8, 0xC1, 0xE1, 0x04, 0x41, 0x83, 0xE1, 0x03,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xCA, 0x41,
0x8B, 0xD2, 0xC1, 0xE1, 0x04, 0xC1, 0xEA, 0x05, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x41,
0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x2B, 0xC2, 0x45, 0x8B, 0xCB, 0x49,
0xC1, 0xE9, 0x0B, 0x8B, 0xC8, 0xC1, 0xE1, 0x04, 0x41, 0x83, 0xE1, 0x03,
0x44, 0x8B, 0xC0, 0x41, 0xC1, 0xE8, 0x05, 0x44, 0x33, 0xC1, 0x41, 0x8B,
0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B, 0x54, 0x8D, 0xF0, 0x41,
0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0, 0x41, 0x8B, 0xD2, 0x41,
0x8B, 0xCA, 0xC1, 0xEA, 0x05, 0xC1, 0xE1, 0x04, 0x33, 0xD1, 0x42, 0x8B,
0x4C, 0x8D, 0xF0, 0x41, 0x03, 0xCB, 0x41, 0x03, 0xD2, 0x33, 0xD1, 0x2B,
0xC2, 0x41, 0x81, 0xC3, 0x47, 0x86, 0xC8, 0x61, 0x44, 0x8B, 0xC0, 0x45,
0x8B, 0xCB, 0x41, 0xC1, 0xE8, 0x05, 0x8B, 0xC8, 0xC1, 0xE1, 0x04, 0x44,
0x33, 0xC1, 0x41, 0x8B, 0xCB, 0x83, 0xE1, 0x03, 0x44, 0x03, 0xC0, 0x8B,
0x54, 0x8D, 0xF0, 0x41, 0x03, 0xD3, 0x44, 0x33, 0xC2, 0x45, 0x2B, 0xD0,
0x48, 0x83, 0xEF, 0x01, 0x0F, 0x85, 0xB6, 0xFA, 0xFF, 0xFF, 0x48, 0x83,
0xEB, 0x01, 0x0F, 0x85, 0x8C, 0xF5, 0xFF, 0xFF, 0x48, 0x8B, 0x5C, 0x24,
0x20, 0x41, 0x33, 0xC2, 0x48, 0x8B, 0x74, 0x24, 0x28, 0x48, 0x8B, 0x7C,
0x24, 0x30, 0x48, 0x83, 0xC4, 0x10, 0x5D, 0xC3
];
// &[0xFF, 0xC0, 0x90, 0x90, 0xC3]
// Setup an environment to run inside of.
let mut renv = Box::new(RawEnvironment::new());
renv.load(&mut vm.cpu, &shellcode).unwrap();
vm.env = renv;
let stack_base = 0xF0000;
vm.cpu.mem.alloc_memory(
AllocLayout {
addr: Some(stack_base),
size: 0x2000,
align: 0x1000,
},
Mapping {
perm: perm::READ | perm::WRITE,
value: 0xAA,
},
).unwrap();
// Set up the stack
let rsp_node = vm.cpu.sleigh().get_reg("RSP").unwrap().var;
vm.cpu.write_reg(rsp_node, stack_base + 0x2000 - 0x100);
// Add instrumentation
let counter = vm.cpu.trace.register_store(vec![0_u64]);
//vm.add_injector(BlockCounter { counter });
// Run until the VM exits.
let limit = 1000000;
let mut start = SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_millis();
println!("start: {start}");
sleep(Duration::from_millis(100));
start = SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_millis();
println!("start: {start}");
let mut count = 0;
let exit = loop {
vm.icount_limit = limit;
vm.cpu.icount = 0;
let exit = vm.run();
let now = SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_millis();
let elapsed = now - start;
count += 1;
if count == 50 {
panic!("nein");
}
let freq = (limit as f64) / ((elapsed as f64) / 1000.0);
println!("{limit} instructions in {elapsed}ms ({freq:.2}/s)");
start = now;
match exit {
VmExit::InstructionLimit => {
println!("Instruction limit")
}
_ => break exit
}
};
println!("execution finished!");
println!("{exit:?}");
//println!("{}", icicle_vm::debug::current_disasm(&mut vm));
// Read instrumentation data.
let blocks_hit = vm.cpu.trace[counter]
.as_any()
.downcast_ref::<Vec<u64>>()
.unwrap()[0];
let blocks_executed = blocks_hit.saturating_sub(1);
println!("{blocks_executed} blocks were executed");
let rax = vm.cpu.sleigh().get_reg("RAX").unwrap().var;
let rax_val = vm.cpu.read_reg(rax);
println!("rax: 0x{rax_val:X}");
}
struct BlockCounter {
counter: icicle_vm::cpu::StoreRef,
}
impl icicle_vm::CodeInjector for BlockCounter {
fn inject(
&mut self,
_cpu: &mut icicle_vm::cpu::Cpu,
group: &icicle_vm::cpu::BlockGroup,
code: &mut icicle_vm::BlockTable,
) {
let store_id = self.counter.get_store_id();
for block in &mut code.blocks[group.range()] {
// counter += 1
let counter = block.pcode.alloc_tmp(8);
let instrumentation = [
(counter, pcode::Op::Load(store_id), 0_u64).into(),
(counter, pcode::Op::IntAdd, (counter, 1_u64)).into(),
(pcode::Op::Store(store_id), (0_u64, counter)).into(),
];
// Inject the instrumentation at the start of the block.
block.pcode.instructions.splice(..0, instrumentation);
}
}
}
+59
View File
@@ -0,0 +1,59 @@
use std::{any::Any};
use icicle_vm::{VmExit};
use icicle_vm::cpu::{Cpu, Environment, debug_info::{DebugInfo, SourceLocation}};
use icicle_vm::cpu::mem::{AllocLayout, Mapping, perm};
pub struct RawEnvironment {
debug_info: DebugInfo,
}
impl RawEnvironment {
pub fn new() -> Self {
Self { debug_info: DebugInfo::default() }
}
}
/*impl ElfLoader for RawEnvironment {
const DYNAMIC_MEMORY: bool = true;
}*/
impl Environment for RawEnvironment {
fn load(&mut self, cpu: &mut Cpu, code_bytes: &[u8]) -> Result<(), String> {
let layout = AllocLayout { addr: Some(0x10000), size: 0x1000, align: 0x1000 };
let base_addr = cpu
.mem
.alloc_memory(layout, Mapping { perm: perm::MAP, value: 0xaa })
.map_err(|e| format!("Failed to allocate memory: {e:?}"))?;
// NOTE: without READ we cannot translate the code and a confusing exception is raised
cpu.mem.update_perm(layout.addr.unwrap(), layout.size, perm::EXEC | perm::READ)
.map_err(|e| format!("Failed to update perm: {e:?}"))?;
cpu.mem.write_bytes(base_addr, code_bytes, perm::NONE)
.map_err(|e|format!("Failed to write memory: {e:?}"))?;
(cpu.arch.on_boot)(cpu, base_addr);
Ok(())
}
fn handle_exception(&mut self, _: &mut Cpu) -> Option<VmExit> {
None
}
fn symbolize_addr(&mut self, _: &mut Cpu, addr: u64) -> Option<SourceLocation> {
self.debug_info.symbolize_addr(addr)
}
fn lookup_symbol(&mut self, symbol: &str) -> Option<u64> {
self.debug_info.symbols.resolve_sym(symbol)
}
fn snapshot(&mut self) -> Box<dyn Any> {
Box::new(())
}
fn restore(&mut self, _: &Box<dyn Any>) {}
}