From 4e155b3d22785efe67519acefd1eac0f327b37c8 Mon Sep 17 00:00:00 2001 From: Wu ChenXu <34511237+kabeor@users.noreply.github.com> Date: Thu, 14 Oct 2021 00:00:10 +0800 Subject: [PATCH 01/16] Update Documentation Version (#1459) * Update Documentation version * Update documentation links in docs/README --- .gitmodules | 3 + CREDITS.TXT | 1 + .../API_Doc_Pic/ABkexFCfphu3zIg.png | Bin 4779 -> 0 bytes .../API_Doc_Pic/DkztJcigHCdmnRp.png | Bin 4174 -> 0 bytes .../API_Doc_Pic/F3rSByYuNTGDtC1.png | Bin 71651 -> 0 bytes .../API_Doc_Pic/I25E9sWcJpGyax7.png | Bin 27807 -> 0 bytes .../API_Doc_Pic/IZhyWrGebA5tT4i.png | Bin 4282 -> 0 bytes .../API_Doc_Pic/K4HMijIVt6lofvT.png | Bin 3594 -> 0 bytes .../API_Doc_Pic/MbZk8KjQFqJOxmd.png | Bin 2123 -> 0 bytes .../API_Doc_Pic/NExsavSgu4yMbBQ.png | Bin 27616 -> 0 bytes .../API_Doc_Pic/OVaHwelNQ4tcLmo.png | Bin 34594 -> 0 bytes .../API_Doc_Pic/YCMNcEVyX8GHoPb.png | Bin 35483 -> 0 bytes .../API_Doc_Pic/ZtRKvUoaPTlshJ4.png | Bin 4501 -> 0 bytes .../API_Doc_Pic/aU1lbmxMjXA5g3K.png | Bin 14221 -> 0 bytes .../API_Doc_Pic/bpu4r8hgzUvO7Pm.png | Bin 4887 -> 0 bytes .../API_Doc_Pic/dqKBwAWUL7XvypE.png | Bin 3653 -> 0 bytes .../API_Doc_Pic/fOnNpSKvjYyc7QB.png | Bin 120733 -> 0 bytes .../API_Doc_Pic/iyodlNFY7hHEOgS.png | Bin 14310 -> 0 bytes .../API_Doc_Pic/juNPWvwGUlraKRh.png | Bin 13007 -> 0 bytes .../API_Doc_Pic/kbrF7NdV6LDxnYI.png | Bin 1990 -> 0 bytes .../API_Doc_Pic/l1AhdxgKE2U3tZB.png | Bin 2502 -> 0 bytes .../API_Doc_Pic/l4HhgDzcJIVvFNU.png | Bin 2415 -> 0 bytes .../API_Doc_Pic/q3JtOQRPl5xTFKp.png | Bin 15096 -> 0 bytes .../Micro Unicorn-Engine API Documentation.md | 2717 ----------------- docs/README.md | 4 +- docs/Unicorn_Engine_Documentation | 1 + 26 files changed, 7 insertions(+), 2719 deletions(-) create mode 100644 .gitmodules delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/ABkexFCfphu3zIg.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/DkztJcigHCdmnRp.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/F3rSByYuNTGDtC1.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/I25E9sWcJpGyax7.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/IZhyWrGebA5tT4i.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/K4HMijIVt6lofvT.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/MbZk8KjQFqJOxmd.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/NExsavSgu4yMbBQ.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/OVaHwelNQ4tcLmo.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/YCMNcEVyX8GHoPb.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/ZtRKvUoaPTlshJ4.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/aU1lbmxMjXA5g3K.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/bpu4r8hgzUvO7Pm.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/dqKBwAWUL7XvypE.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/fOnNpSKvjYyc7QB.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/iyodlNFY7hHEOgS.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/juNPWvwGUlraKRh.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/kbrF7NdV6LDxnYI.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/l1AhdxgKE2U3tZB.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/l4HhgDzcJIVvFNU.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/q3JtOQRPl5xTFKp.png delete mode 100644 docs/Micro Unicorn-Engine API Documentation/Micro Unicorn-Engine API Documentation.md create mode 160000 docs/Unicorn_Engine_Documentation diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..5284170e --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/Unicorn_Engine_Documentation"] + path = docs/Unicorn_Engine_Documentation + url = git@github.com:kabeor/Unicorn-Engine-Documentation diff --git a/CREDITS.TXT b/CREDITS.TXT index 8f5970d6..0db400d6 100644 --- a/CREDITS.TXT +++ b/CREDITS.TXT @@ -78,3 +78,4 @@ Kevin Foo (chfl4gs): Travis-CI migration Simon Gorchakov: PowerPC target Stuart Dootson (studoot): MSVC compatibility with PowerPC target support Ziqiao Kong (lazymio): uc_context_free() API and various bug fix & improvement. +Chenxu Wu (kabeor): Documentation \ No newline at end of file diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/ABkexFCfphu3zIg.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/ABkexFCfphu3zIg.png deleted file mode 100644 index a82d8e16d461377f47f1ed0d07e31e12d51762a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4779 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 QCe%I$8>j2F*Zdy*4-aDhPXGV_ diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/DkztJcigHCdmnRp.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/DkztJcigHCdmnRp.png deleted file mode 100644 index 95f43f59f9a90d1fe5d7c0f5abb320635b63eb9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4174 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

sznq0}V@!ahaC`>;Z2pOw9XcC|rm-wrlWI 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

K@_QG~7(9Oy$i3DK@o2wRBcB;O3%lX- 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 D#V#qa diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/I25E9sWcJpGyax7.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/I25E9sWcJpGyax7.png deleted file mode 100644 index f4a5af7289a9074e21f92564d285db8a711cc833..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27807 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 diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/IZhyWrGebA5tT4i.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/IZhyWrGebA5tT4i.png deleted file mode 100644 index 4fb5a43ca5d31e44f3022f9cbf46db38bd3f1b0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4282 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 diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/K4HMijIVt6lofvT.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/K4HMijIVt6lofvT.png deleted file mode 100644 index 521dbfb772da5dbbaab90ae58d5e0b58712e988d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3594 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 v-xVpro*o>cC<*zA`GT0Z_4)Z+gn diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/MbZk8KjQFqJOxmd.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/MbZk8KjQFqJOxmd.png deleted file mode 100644 index 795ed2cb4ac8f910d497eaeb66dbeeed55729bd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2123 zcmV-R2(0P0DzPLC{%@si~zD~04M+efID0*kpN^N0AzpwM*sks zlmJI+001EXC?NnSJOBUx07oGJM>_yyQ~*a*T`rMbFOpy~lwvfMWH**(I+$oYnE+%v zUoewlG?ZdBm1H=VWjU8;JD6%enrlIu0DypPL!EC%o^eQ@a!R1W#KvAPl3p;AUon$l zGn8XCmSs4XW;vH=J(+1enrS|o0Dx+1K$~nqoNPjzZ9<%GM4fI$o^VH=bW5RiO`>*B zqX3y|bO&w{000LrNkl-}>5{{KHZH9)8! z;l+DA=TV--6fu}rqfaAg5-hPCt^~^kmV*_fjkJ+A7Nm`|u^?@v{cveNQVOy;6z$K+ zAFXP8?Vd6oXJdmY})d?}2EVhhkTv4iw zwzyK1ly;VK+Ho{r-~RaFkKf;Y`uWG(n{Th5KWk_o^REa!y@Y)9YR%#05i^ijY6{vJ zK}`^<^>Wkuva}#gQxV#$i>>hUi**=A;w0hD9|_tq{{^a9(tiK$m%9G`)yo(4)sxR2 zH?+^$uYCM;JZ;Kxz`X=*(b=7}sYG?Y-O%SAF0K?wkt{mjE>iXsp+863Z(i50zI*Y_ z)z|eGmzzyPJE2`PPifDNc(*TC>z|0LXW}~w_CuTrCreu?A<9CZW0mLu`^&UL@@@Wj z+T72$iMTV%MJmZo7`*LUF*vle7uoKph&WqP&MEDj9x*YRk9teAZ*S`Bt7l);mz#Pc z(at0GFZ=o|EZIfIp=4sgowqrYeVg8*$8l3h&|F=xs*P^vVWT+WKI6ab-j_!$ZPAJe zbz?@AnGJWRQQK~^ZqGR;xqe5)(p zA?D;-Uan3AZ81DSYIC&>0R}=2x{H#wq-igqFSE315;d#a6+tK)x2AF70Ir_@XoM+B)t`;5MQ z{z@|YnR~&9Xo~;zh>AUJqhuSFxxiY9QIgb27xVUQEJzz^V?o+T8w=7#+DID<(ni`? zd}#;90_GD?E`aS3b`Exv542clTR4uRZEG{6Em7$e;icjb6t4wQJ&_c+khX!g!q-4sV%z$<+!w&4KL+PV+6K*q29}@=(jW*DSLIYwdq6eu zrp@t!BI00jT?iDqNV}yiTvrHgPlo$G46>3)w7aoX9%hlY*|$McYXuDO*09l*gK{&{PBItFHwkh21sDTudfa1SMdmrEK&$~hP@IGE4_kl7Q(kcKT z?T$8pq95vU0Ioy1b)Yp0fieqy@DU)N@kud>A#jEP@DPBhp}-uIW4x`cl;|4Lo4L0! zUMCu$&d@=#1UPwL+F7g1Bj$xB%i@#i2dF&2$oY7$)v_&jW?E-CiN7pWWq8nIdXhU`;es8n+ zw%a~HV5A+uJ^Qw4LGBQ~4d&$$`U8js%V1!eZIQA2km>%Z4(VOp9GZ2 z&c3w!I&Rq5>~H)}PJ1Y(ISB1RCGmRcFzrDl(S6%1-VBr-x$zO8gZ4c{fYN}}cP*P& z*oI1*&^qlqXbxy0K6sGkXrcpV4VfCF7J@PJvefzv@yq3p*=o-+w8fDZX<28Z;#C1)^-<6|0M_W zw_UWo^S7-lc!An-m{IJa?atp0v=uya41=`&d^;G--_~wJV2c6e*ySga_crb2wVUF002ovPDHLkV1j(* B4w(P| diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/NExsavSgu4yMbBQ.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/NExsavSgu4yMbBQ.png deleted file mode 100644 index 3bd24013eed38dfdb5ae53482e504d59bd08dc2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27616 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 diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/OVaHwelNQ4tcLmo.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/OVaHwelNQ4tcLmo.png deleted file mode 100644 index 05bd9d8bf11c3bb8afa298f7cfb9cea373dd2387..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34594 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

7V3? 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 diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/YCMNcEVyX8GHoPb.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/YCMNcEVyX8GHoPb.png deleted file mode 100644 index 0268295b8ebb927fee84092af0ed7926996d47c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35483 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∋F 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 XkMZC63HUd=EvHZXe7x$%D>wf?f$Sy> diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/bpu4r8hgzUvO7Pm.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/bpu4r8hgzUvO7Pm.png deleted file mode 100644 index a5df3cb9fddef3f8bd439832960bee893ad23d6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4887 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%0D8UJnHM$&Zcu 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 X>$5nvfO*XK_pnqIwG=Ak%tQV!N`vGk diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/juNPWvwGUlraKRh.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/juNPWvwGUlraKRh.png deleted file mode 100644 index 83a3baa182a68a524f13ed9de3115eb9d4295c68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13007 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 I>;KdL1}Ed=VE_OC diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/kbrF7NdV6LDxnYI.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/kbrF7NdV6LDxnYI.png deleted file mode 100644 index c7e5bd4d6027980d298e4b07da42348011021425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1990 zcmZvddpOgJAIHB%R7OZ{Nk^B1sFo?_vLab-%VFjeXT}T-6GMcOq8ysWu=_sg2GlVG0)ggZ_J#)lmOx!10Ahhe24H|qPE7~u z$bbO=BwBhOrUU+ZfPW%@1^|!&pveHB2N-Oe<@)+MfYt-hmViGNKx2P9LjUb(Cc%W^ zXPWJAmJ?vX46*_Ne@h>Dmai$p?|8Pqc`gZ=8)(TSpJWBw zJ#XjZk7nZGSw6?I2nYu8L=MS3HvpL%WDQ=lW?e+FfJAcesk{&yc8D!I)Rs-L%cqAA;NDu0xqh{k&L34d&(`t5>mh7EFaQW-VtpXcm=8b1Mvj0QZ zJ=6^2`(gKvfh+6;56ptuv~)$NLFt)k>>P^XnAg`3C(zYc+)7}gyMI|ScO8UtBaD1%dKlaMps9kJn80)3-VvrMp|0P z?OtB8-KQ4!mz>QD@OSR*O&zD|y3?ko(w^Vk#5x8+o<`%bo(k_5uzGjxzZgRC9}{6k zR_7s6>k5gtx;F4eV<=CbW8DSv)MPF%*Po=aAMC*uG2K7cWFvL!oj7l_7?e`!0UK3; zBge@$d>2vqg_Q>+Y7(_9&%QJ>^9gHxia$byHtW{^b+^OfoZR!smc`VM_+op6%HHx~ zn7(n6QChHr}D`^VbJxK|*p77FNm7bPtd)yv6BIJ7ZR7_BN-h#Y@mIU$m=)w0mBBkZ5 z)}>6O*1Rm%FDvxSb0=|To6e8{e6UghVoYaC-n9!Oq4wtbW${Wl^fb042}zeNNc{o| z{lE^xBKIZs9Mta(lVCxj!*H}w41!6N={`j!(1x~ghSU${Bh`OhGR2jM^BVkK2SVf1 zg78~|FWKVCv6)!)z!35wCU5LnevLc7EwN zn%NOsJZx1Z(1S|XO->52C=KyYOiRbJIwtSWhW(G%PBQa;@M`QZ1oN8{!3DArZa1>? z_}iDGqGhL@uLR&j?|04w#7aBK3nmu~dew9G$$JO*6Ep%qbfM1>CbfJOLUs$Z#C4tQN|8u7h& zfP?tarPCmuEJhK@oI<(_50#&yGNk1tALP?# zk>%aH7PIEro)VQpmVRIi1Y0T5Hc26KRt-)lZaL1SP3G`>cJSHm!Fnu7zZ&xqi?qz1 zjmD6ic}urtmp2K1*>7AtaacZ#L(#PCyQg|!q|@2wvD?iS2`)lf_GEB3&LY+h3i(zx zJO9Mys|ruh{)ZWLERsM;lrD&oajthNIz^w3^P_yLYw=VuDN+NulSr%N-c+xc>R>!P z7_DM$%0Z;xk8X@!lrH$vD!0I!lP#G=l>V{RsfG!S3rX*Ba|QzX=Uyqc_kxFZE|<)= zwQtg{Ot5A?g0&YoW#)^@bY~k)A9*(8zEzzE%uT2s{B#qr?cQ9|-@bx@nzHFleoSdp zAdRg=3{&k34vn6>^6ILpmqly{q$A9H^1z+w2i>vBJ(zq=o{jeJiHSe1m z!iCO8?x!spuZ4^>;5=jHZF3}hdM7%|*~UX<8ESj@ralKckv*z)D5vV|;bOL2CW5eX zMd&pI?pH9|neqZL@wOxqqX8*>`#HvpYLCMx)_4mlo5e@S=JfN;wWpj-v!x#~_5+u1 zWhZ}b3H!MGE?9zoSNNee($?CCtK*=E?DM~Xa~Mt^u^Wg%#W(+)GiENoI+G+{z3ucr z*5DubuW?UsES%a~X)!ip)QS=Hsjn$QD389WHDV{~+F~_Sb7$af?+xxcAg7d>t16kq Q{C9&L&S31SZ3#*L0j<%}^8f$< diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/l1AhdxgKE2U3tZB.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/l1AhdxgKE2U3tZB.png deleted file mode 100644 index 24e592ad5e7312e30e430f8e39dbb89e9e295504..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2502 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 b?+#Y(tT}ZdtX6gZk&<(BamO{DCf@i9_0W-& diff --git a/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/q3JtOQRPl5xTFKp.png b/docs/Micro Unicorn-Engine API Documentation/API_Doc_Pic/q3JtOQRPl5xTFKp.png deleted file mode 100644 index 258d275bff9de9aa9cdaa42206042727367b89bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15096 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 E2N$L`Z~y=R diff --git a/docs/Micro Unicorn-Engine API Documentation/Micro Unicorn-Engine API Documentation.md b/docs/Micro Unicorn-Engine API Documentation/Micro Unicorn-Engine API Documentation.md deleted file mode 100644 index a3c8d68e..00000000 --- a/docs/Micro Unicorn-Engine API Documentation/Micro Unicorn-Engine API Documentation.md +++ /dev/null @@ -1,2717 +0,0 @@ -# Micro Unicorn-Engine API Documentation - -**Warning:** ***This is an unofficial API document by [kabeor](https://github.com/kabeor), If there are any mistakes, welcome to ask.*** - -**注意:** ***这是由kabeor制作的非官方API参考文档,如有错误欢迎提出,觉得不错可以给个star鼓励我*** - -之前对Capstone反汇编引擎的API分析文档已经被[官方](http://www.capstone-engine.org/documentation.html)收录 https://github.com/kabeor/Micro-Capstone-Engine-API-Documentation ,在实现自己想要做出的调试器的路上,又遇到了与Capstone同作者的国外大佬aquynh的另一个著名项目Unicorn,不巧的是,详尽的API文档仍然较少,更多的是大篇幅的代码,因此决定继续分析Unicorn框架,包括数据类型,已开放API及其实现。 - -Unicorn是一个轻量级, 多平台, 多架构的CPU模拟器框架,基于qemu开发,它可以代替CPU模拟代码的执行,常用于恶意代码分析,Fuzz等,该项目被用于Radare2逆向分析框架,GEF(gdb的pwn分析插件),Pwndbg,Angr符号执行框架等多个著名项目。接下来我也将通过阅读源码和代码实际调用来写一个简单的非官方版本的API手册。 - -Blog: kabeor.cn - -## 0x0 开发准备 - -Unicorn官网: http://www.unicorn-engine.org - -### 自行编译lib和dll方法 - -源码: https://github.com/unicorn-engine/unicorn/archive/master.zip - -下载后解压 - -文件结构如下: - -``` -. <- 主要引擎core engine + README + 编译文档COMPILE.TXT 等 -├── arch <- 各语言反编译支持的代码实现 -├── bindings <- 中间件 -│ ├── dotnet <- .Net 中间件 + 测试代码 -│ ├── go <- go 中间件 + 测试代码 -│ ├── haskell <- Haskell 中间件 + 测试代码 -│ ├── java <- Java 中间件 + 测试代码 -│ ├── pascal <- Pascal 中间件 + 测试代码 -│ ├── python <- Python 中间件 + 测试代码 -│ ├── ruby <- Ruby 中间件 + 测试代码 -│ └── vb6 <- VB6 中间件 + 测试代码 -├── docs <- 文档,主要是Unicorn的实现思路 -├── include <- C头文件 -├── msvc <- Microsoft Visual Studio 支持(Windows) -├── qemu <- qemu框架源码 -├── samples <- Unicorn使用示例 -└── tests <- C语言测试用例 -``` - -下面演示Windows10使用Visual Studio2019编译 - -打开msvc文件夹,内部结构如下 - -![image.png](API_Doc_Pic/iyodlNFY7hHEOgS.png) - -VS打开unicorn.sln项目文件,解决方案自动载入这些 - -![image.png](API_Doc_Pic/fOnNpSKvjYyc7QB.png) - -如果都需要的话,直接编译就好了,只需要其中几种,则右键解决方案->属性->配置属性 如下 - -![image.png](API_Doc_Pic/F3rSByYuNTGDtC1.png) - -生成选项中勾选你需要的支持项即可 - -项目编译属性为: -1. 使用多字节字符集 -2. 不使用预编译头 -3. 附加选项 /wd4018 /wd4244 /wd4267 -4. 预处理器定义中添加 ` _CRT_SECURE_NO_WARNINGS` - -编译后会在当前文件夹Debug目录下生成unicorn.lib静态编译库和unicorn.dll动态库这样就可以开始使用Unicorn进行开发了 - -编译到最后一项可能会报错系统找不到指定的路径,查看makefile发现问题出现在此处 -![image.png](API_Doc_Pic/YCMNcEVyX8GHoPb.png) - -事实上只不过是不能将生成的lib和dll复制到新建的文件夹而已,只需要到生成目录去找即可。 - -官方目前提供的最新已编译版本为1.0.1版本,比较老,建议自己编辑最新版本源码,以获得更多可用API。 -Win32:https://github.com/unicorn-engine/unicorn/releases/download/1.0.1/unicorn-1.0.1-win32.zip -Win64:https://github.com/unicorn-engine/unicorn/releases/download/1.0.1/unicorn-1.0.1-win64.zip - -**注意: 选x32或x64将影响后面开发的位数** - - - -### 引擎调用测试 - -新建一个VS项目,将..\unicorn-master\include\unicorn中的头文件以及编译好的lib和dll文件全部拷贝到新建项目的主目录下 - -![image.png](API_Doc_Pic/I25E9sWcJpGyax7.png) - -在VS解决方案中,头文件添加现有项unicorn.h,资源文件中添加unicorn.lib,重新生成解决方案 - -![image.png](API_Doc_Pic/OVaHwelNQ4tcLmo.png) - -接下来测试我们生成的unicorn框架 - -主文件代码如下 - -```cpp -#include -#include "unicorn/unicorn.h" - -// 要模拟的指令 -#define X86_CODE32 "\x41\x4a" // INC ecx; DEC edx - -// 起始地址 -#define ADDRESS 0x1000000 - -int main() -{ - uc_engine* uc; - uc_err err; - int r_ecx = 0x1234; // ECX 寄存器 - int r_edx = 0x7890; // EDX 寄存器 - - printf("Emulate i386 code\n"); - - // X86-32bit 模式初始化模拟 - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - - // 给模拟器申请 2MB 内存 - uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); - - // 将要模拟的指令写入内存 - if (uc_mem_write(uc, ADDRESS, X86_CODE32, sizeof(X86_CODE32) - 1)) { - printf("Failed to write emulation code to memory, quit!\n"); - return -1; - } - - // 初始化寄存器 - uc_reg_write(uc, UC_X86_REG_ECX, &r_ecx); - uc_reg_write(uc, UC_X86_REG_EDX, &r_edx); - - printf(">>> ECX = 0x%x\n", r_ecx); - printf(">>> EDX = 0x%x\n", r_edx); - - // 模拟代码 - err = uc_emu_start(uc, ADDRESS, ADDRESS + sizeof(X86_CODE32) - 1, 0, 0); - if (err) { - printf("Failed on uc_emu_start() with error returned %u: %s\n", - err, uc_strerror(err)); - } - - // 打印寄存器值 - printf("Emulation done. Below is the CPU context\n"); - - uc_reg_read(uc, UC_X86_REG_ECX, &r_ecx); - uc_reg_read(uc, UC_X86_REG_EDX, &r_edx); - printf(">>> ECX = 0x%x\n", r_ecx); - printf(">>> EDX = 0x%x\n", r_edx); - - uc_close(uc); - - return 0; -} -``` - -运行结果如下 - -![image.png](API_Doc_Pic/bpu4r8hgzUvO7Pm.png) - -ecx+1和edx-1成功模拟。 - -## 0x1 数据类型分析 - -### uc_arch - -架构选择 - -```cpp -typedef enum uc_arch { - UC_ARCH_ARM = 1, // ARM 架构 (包括 Thumb, Thumb-2) - UC_ARCH_ARM64, // ARM-64, 也称 AArch64 - UC_ARCH_MIPS, // Mips 架构 - UC_ARCH_X86, // X86 架构 (包括 x86 & x86-64) - UC_ARCH_PPC, // PowerPC 架构 (暂不支持) - UC_ARCH_SPARC, // Sparc 架构 - UC_ARCH_M68K, // M68K 架构 - UC_ARCH_MAX, -} uc_arch; -``` - - - -### uc_mode - -模式选择 - -```cpp -typedef enum uc_mode { - UC_MODE_LITTLE_ENDIAN = 0, // 小端序模式 (默认) - UC_MODE_BIG_ENDIAN = 1 << 30, // 大端序模式 - - // arm / arm64 - UC_MODE_ARM = 0, // ARM 模式 - UC_MODE_THUMB = 1 << 4, // THUMB 模式 (包括 Thumb-2) - UC_MODE_MCLASS = 1 << 5, // ARM's Cortex-M 系列 (暂不支持) - UC_MODE_V8 = 1 << 6, // ARMv8 A32 encodings for ARM (暂不支持) - - // arm (32bit) cpu 类型 - UC_MODE_ARM926 = 1 << 7, // ARM926 CPU 类型 - UC_MODE_ARM946 = 1 << 8, // ARM946 CPU 类型 - UC_MODE_ARM1176 = 1 << 9, // ARM1176 CPU 类型 - - // mips - UC_MODE_MICRO = 1 << 4, // MicroMips 模式 (暂不支持) - UC_MODE_MIPS3 = 1 << 5, // Mips III ISA (暂不支持) - UC_MODE_MIPS32R6 = 1 << 6, // Mips32r6 ISA (暂不支持) - UC_MODE_MIPS32 = 1 << 2, // Mips32 ISA - UC_MODE_MIPS64 = 1 << 3, // Mips64 ISA - - // x86 / x64 - UC_MODE_16 = 1 << 1, // 16-bit 模式 - UC_MODE_32 = 1 << 2, // 32-bit 模式 - UC_MODE_64 = 1 << 3, // 64-bit 模式 - - // ppc - UC_MODE_PPC32 = 1 << 2, // 32-bit 模式 (暂不支持) - UC_MODE_PPC64 = 1 << 3, // 64-bit 模式 (暂不支持) - UC_MODE_QPX = 1 << 4, // Quad Processing eXtensions 模式 (暂不支持) - - // sparc - UC_MODE_SPARC32 = 1 << 2, // 32-bit 模式 - UC_MODE_SPARC64 = 1 << 3, // 64-bit 模式 - UC_MODE_V9 = 1 << 4, // SparcV9 模式 (暂不支持) - - // m68k -} uc_mode; -``` - - - -### uc_err - -错误类型,是uc_errno()的返回值 - -```cpp -typedef enum uc_err { - UC_ERR_OK = 0, // 无错误 - UC_ERR_NOMEM, // 内存不足: uc_open(), uc_emulate() - UC_ERR_ARCH, // 不支持的架构: uc_open() - UC_ERR_HANDLE, // 不可用句柄 - UC_ERR_MODE, // 不可用/不支持架构: uc_open() - UC_ERR_VERSION, // 不支持版本 (中间件) - UC_ERR_READ_UNMAPPED, // 由于在未映射的内存上读取而退出模拟: uc_emu_start() - UC_ERR_WRITE_UNMAPPED, // 由于在未映射的内存上写入而退出模拟: uc_emu_start() - UC_ERR_FETCH_UNMAPPED, // 由于在未映射的内存中获取数据而退出模拟: uc_emu_start() - UC_ERR_HOOK, // 无效的hook类型: uc_hook_add() - UC_ERR_INSN_INVALID, // 由于指令无效而退出模拟: uc_emu_start() - UC_ERR_MAP, // 无效的内存映射: uc_mem_map() - UC_ERR_WRITE_PROT, // 由于UC_MEM_WRITE_PROT冲突而停止模拟: uc_emu_start() - UC_ERR_READ_PROT, // 由于UC_MEM_READ_PROT冲突而停止模拟: uc_emu_start() - UC_ERR_FETCH_PROT, // 由于UC_MEM_FETCH_PROT冲突而停止模拟: uc_emu_start() - UC_ERR_ARG, // 提供给uc_xxx函数的无效参数 - UC_ERR_READ_UNALIGNED, // 未对齐读取 - UC_ERR_WRITE_UNALIGNED, // 未对齐写入 - UC_ERR_FETCH_UNALIGNED, // 未对齐的提取 - UC_ERR_HOOK_EXIST, // 此事件的钩子已经存在 - UC_ERR_RESOURCE, // 资源不足: uc_emu_start() - UC_ERR_EXCEPTION, // 未处理的CPU异常 - UC_ERR_TIMEOUT // 模拟超时 -} uc_err; -``` - - - -### uc_mem_type - -UC_HOOK_MEM_*的所有内存访问类型 - -```cpp -typedef enum uc_mem_type { - UC_MEM_READ = 16, // 内存从..读取 - UC_MEM_WRITE, // 内存写入到.. - UC_MEM_FETCH, // 内存被获取 - UC_MEM_READ_UNMAPPED, // 未映射内存从..读取 - UC_MEM_WRITE_UNMAPPED, // 未映射内存写入到.. - UC_MEM_FETCH_UNMAPPED, // 未映射内存被获取 - UC_MEM_WRITE_PROT, // 内存写保护,但是已映射 - UC_MEM_READ_PROT, // 内存读保护,但是已映射 - UC_MEM_FETCH_PROT, // 内存不可执行,但是已映射 - UC_MEM_READ_AFTER, // 内存从 (成功访问的地址) 读入 -} uc_mem_type; -``` - - - -### uc_hook_type - -uc_hook_add()的所有hook类型参数 - -```cpp -typedef enum uc_hook_type { - // Hook 所有中断/syscall 事件 - UC_HOOK_INTR = 1 << 0, - // Hook 一条特定的指令 - 只支持非常小的指令子集 - UC_HOOK_INSN = 1 << 1, - // Hook 一段代码 - UC_HOOK_CODE = 1 << 2, - // Hook 基本块 - UC_HOOK_BLOCK = 1 << 3, - // 用于在未映射的内存上读取内存的Hook - UC_HOOK_MEM_READ_UNMAPPED = 1 << 4, - // Hook 无效的内存写事件 - UC_HOOK_MEM_WRITE_UNMAPPED = 1 << 5, - // Hook 执行事件的无效内存 - UC_HOOK_MEM_FETCH_UNMAPPED = 1 << 6, - // Hook 读保护的内存 - UC_HOOK_MEM_READ_PROT = 1 << 7, - // Hook 写保护的内存 - UC_HOOK_MEM_WRITE_PROT = 1 << 8, - // Hook 不可执行内存上的内存 - UC_HOOK_MEM_FETCH_PROT = 1 << 9, - // Hook 内存读取事件 - UC_HOOK_MEM_READ = 1 << 10, - // Hook 内存写入事件 - UC_HOOK_MEM_WRITE = 1 << 11, - // Hook 内存获取执行事件 - UC_HOOK_MEM_FETCH = 1 << 12, - // Hook 内存读取事件,只允许能成功访问的地址 - // 成功读取后将触发回调 - UC_HOOK_MEM_READ_AFTER = 1 << 13, - // Hook 无效指令异常 - UC_HOOK_INSN_INVALID = 1 << 14, -} uc_hook_type; -``` - - - -### 宏定义Hook类型 - -```cpp -// Hook 所有未映射内存访问的事件 -#define UC_HOOK_MEM_UNMAPPED (UC_HOOK_MEM_READ_UNMAPPED + UC_HOOK_MEM_WRITE_UNMAPPED + UC_HOOK_MEM_FETCH_UNMAPPED) -// Hook 所有对受保护内存的非法访问事件 -#define UC_HOOK_MEM_PROT (UC_HOOK_MEM_READ_PROT + UC_HOOK_MEM_WRITE_PROT + UC_HOOK_MEM_FETCH_PROT) -// Hook 所有非法读取存储器的事件 -#define UC_HOOK_MEM_READ_INVALID (UC_HOOK_MEM_READ_PROT + UC_HOOK_MEM_READ_UNMAPPED) -// Hook 所有非法写入存储器的事件 -#define UC_HOOK_MEM_WRITE_INVALID (UC_HOOK_MEM_WRITE_PROT + UC_HOOK_MEM_WRITE_UNMAPPED) -// Hook 所有非法获取内存的事件 -#define UC_HOOK_MEM_FETCH_INVALID (UC_HOOK_MEM_FETCH_PROT + UC_HOOK_MEM_FETCH_UNMAPPED) -// Hook 所有非法的内存访问事件 -#define UC_HOOK_MEM_INVALID (UC_HOOK_MEM_UNMAPPED + UC_HOOK_MEM_PROT) -// Hook 所有有效内存访问的事件 -// 注意: UC_HOOK_MEM_READ 在 UC_HOOK_MEM_READ_PROT 和 UC_HOOK_MEM_READ_UNMAPPED 之前触发 , -// 因此这个Hook可能会触发一些无效的读取。 -#define UC_HOOK_MEM_VALID (UC_HOOK_MEM_READ + UC_HOOK_MEM_WRITE + UC_HOOK_MEM_FETCH) -``` - - - -### uc_mem_region - -由uc_mem_map()和uc_mem_map_ptr()映射内存区域 -使用uc_mem_regions()检索该内存区域的列表 - -```cpp -typedef struct uc_mem_region { - uint64_t begin; // 区域起始地址 (包括) - uint64_t end; // 区域结束地址 (包括) - uint32_t perms; // 区域的内存权限 -} uc_mem_region; -``` - - - -### uc_query_type - -uc_query()的所有查询类型参数 - -```cpp -typedef enum uc_query_type { - // 动态查询当前硬件模式 - UC_QUERY_MODE = 1, - UC_QUERY_PAGE_SIZE, - UC_QUERY_ARCH, -} uc_query_type; -``` - - - -### uc_context - -与uc_context_*()一起使用,管理CPU上下文的不透明存储 - -```cpp -struct uc_context; -typedef struct uc_context uc_context; -``` - - - -### uc_prot - -新映射区域的权限 - -```cpp -typedef enum uc_prot { - UC_PROT_NONE = 0, //无 - UC_PROT_READ = 1, //读取 - UC_PROT_WRITE = 2, //写入 - UC_PROT_EXEC = 4, //可执行 - UC_PROT_ALL = 7, //所有权限 -} uc_prot; -``` - - - -## 0x2 API分析 - -### uc_version - -```cpp -unsigned int uc_version(unsigned int *major, unsigned int *minor); -``` - -用于返回Unicorn API主次版本信息 - -``` -@major: API主版本号 -@minor: API次版本号 -@return 16进制数,计算方式 (major << 8 | minor) - -提示: 该返回值可以和宏UC_MAKE_VERSION比较 -``` - -源码实现 - -```c -unsigned int uc_version(unsigned int *major, unsigned int *minor) -{ - if (major != NULL && minor != NULL) { - *major = UC_API_MAJOR; //宏 - *minor = UC_API_MINOR; //宏 - } - - return (UC_API_MAJOR << 8) + UC_API_MINOR; //(major << 8 | minor) -} -``` - -编译后不可更改,不接受自定义版本 - -使用示例: - -```cpp -#include -#include "unicorn/unicorn.h" -using namespace std; - -int main() -{ - unsigned int version; - version = uc_version(NULL,NULL); - cout << hex << version << endl; - return 0; -} -``` - -输出: - -![image.png](API_Doc_Pic/q3JtOQRPl5xTFKp.png) - -得到版本号1.0.0 - - - -### uc_arch_supported - -```c -bool uc_arch_supported(uc_arch arch); -``` - -确定Unicorn是否支持当前架构 - -``` - @arch: 架构类型 (UC_ARCH_*) - @return 如果支持返回True -``` - -源码实现 - -```c -bool uc_arch_supported(uc_arch arch) -{ - switch (arch) { -#ifdef UNICORN_HAS_ARM - case UC_ARCH_ARM: return true; -#endif -#ifdef UNICORN_HAS_ARM64 - case UC_ARCH_ARM64: return true; -#endif -#ifdef UNICORN_HAS_M68K - case UC_ARCH_M68K: return true; -#endif -#ifdef UNICORN_HAS_MIPS - case UC_ARCH_MIPS: return true; -#endif -#ifdef UNICORN_HAS_PPC - case UC_ARCH_PPC: return true; -#endif -#ifdef UNICORN_HAS_SPARC - case UC_ARCH_SPARC: return true; -#endif -#ifdef UNICORN_HAS_X86 - case UC_ARCH_X86: return true; -#endif - /* 无效或禁用架构 */ - default: return false; - } -} -``` - -使用示例: - -```cpp -#include -#include "unicorn/unicorn.h" -using namespace std; - -int main() -{ - cout << "是否支持UC_ARCH_X86架构:" << uc_arch_supported(UC_ARCH_X86) << endl; - return 0; -} -``` - -输出: - -![image.png](API_Doc_Pic/NExsavSgu4yMbBQ.png) - - - -### uc_open - -```c -uc_err uc_open(uc_arch arch, uc_mode mode, uc_engine **uc); -``` - -创建新的Unicorn实例 - -``` -@arch: 架构类型 (UC_ARCH_*) -@mode: 硬件模式. 由 UC_MODE_* 组合 -@uc: 指向 uc_engine 的指针, 返回时更新 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_open(uc_arch arch, uc_mode mode, uc_engine **result) -{ - struct uc_struct *uc; - - if (arch < UC_ARCH_MAX) { - uc = calloc(1, sizeof(*uc)); //申请内存 - if (!uc) { - // 内存不足 - return UC_ERR_NOMEM; - } - - uc->errnum = UC_ERR_OK; - uc->arch = arch; - uc->mode = mode; - - // 初始化 - // uc->ram_list = { .blocks = QTAILQ_HEAD_INITIALIZER(ram_list.blocks) }; - uc->ram_list.blocks.tqh_first = NULL; - uc->ram_list.blocks.tqh_last = &(uc->ram_list.blocks.tqh_first); - - uc->memory_listeners.tqh_first = NULL; - uc->memory_listeners.tqh_last = &uc->memory_listeners.tqh_first; - - uc->address_spaces.tqh_first = NULL; - uc->address_spaces.tqh_last = &uc->address_spaces.tqh_first; - - switch(arch) { // 根据架构进行预处理 - default: - break; -#ifdef UNICORN_HAS_M68K - case UC_ARCH_M68K: - if ((mode & ~UC_MODE_M68K_MASK) || - !(mode & UC_MODE_BIG_ENDIAN)) { - free(uc); - return UC_ERR_MODE; - } - uc->init_arch = m68k_uc_init; - break; -#endif -#ifdef UNICORN_HAS_X86 - case UC_ARCH_X86: - if ((mode & ~UC_MODE_X86_MASK) || - (mode & UC_MODE_BIG_ENDIAN) || - !(mode & (UC_MODE_16|UC_MODE_32|UC_MODE_64))) { - free(uc); - return UC_ERR_MODE; - } - uc->init_arch = x86_uc_init; - break; -#endif -#ifdef UNICORN_HAS_ARM - case UC_ARCH_ARM: - if ((mode & ~UC_MODE_ARM_MASK)) { - free(uc); - return UC_ERR_MODE; - } - if (mode & UC_MODE_BIG_ENDIAN) { - uc->init_arch = armeb_uc_init; - } else { - uc->init_arch = arm_uc_init; - } - - if (mode & UC_MODE_THUMB) - uc->thumb = 1; - break; -#endif -#ifdef UNICORN_HAS_ARM64 - case UC_ARCH_ARM64: - if (mode & ~UC_MODE_ARM_MASK) { - free(uc); - return UC_ERR_MODE; - } - if (mode & UC_MODE_BIG_ENDIAN) { - uc->init_arch = arm64eb_uc_init; - } else { - uc->init_arch = arm64_uc_init; - } - break; -#endif - -#if defined(UNICORN_HAS_MIPS) || defined(UNICORN_HAS_MIPSEL) || defined(UNICORN_HAS_MIPS64) || defined(UNICORN_HAS_MIPS64EL) - case UC_ARCH_MIPS: - if ((mode & ~UC_MODE_MIPS_MASK) || - !(mode & (UC_MODE_MIPS32|UC_MODE_MIPS64))) { - free(uc); - return UC_ERR_MODE; - } - if (mode & UC_MODE_BIG_ENDIAN) { -#ifdef UNICORN_HAS_MIPS - if (mode & UC_MODE_MIPS32) - uc->init_arch = mips_uc_init; -#endif -#ifdef UNICORN_HAS_MIPS64 - if (mode & UC_MODE_MIPS64) - uc->init_arch = mips64_uc_init; -#endif - } else { // 小端序 -#ifdef UNICORN_HAS_MIPSEL - if (mode & UC_MODE_MIPS32) - uc->init_arch = mipsel_uc_init; -#endif -#ifdef UNICORN_HAS_MIPS64EL - if (mode & UC_MODE_MIPS64) - uc->init_arch = mips64el_uc_init; -#endif - } - break; -#endif - -#ifdef UNICORN_HAS_SPARC - case UC_ARCH_SPARC: - if ((mode & ~UC_MODE_SPARC_MASK) || - !(mode & UC_MODE_BIG_ENDIAN) || - !(mode & (UC_MODE_SPARC32|UC_MODE_SPARC64))) { - free(uc); - return UC_ERR_MODE; - } - if (mode & UC_MODE_SPARC64) - uc->init_arch = sparc64_uc_init; - else - uc->init_arch = sparc_uc_init; - break; -#endif - } - - if (uc->init_arch == NULL) { - return UC_ERR_ARCH; - } - - if (machine_initialize(uc)) - return UC_ERR_RESOURCE; - - *result = uc; - - if (uc->reg_reset) - uc->reg_reset(uc); - - return UC_ERR_OK; - } else { - return UC_ERR_ARCH; - } -} -``` - -**注意: uc_open会申请堆内存,使用完必须用uc_close释放,否则会发生泄露** - -使用示例: - -```cpp -#include -#include "unicorn/unicorn.h" -using namespace std; - -int main() -{ - uc_engine* uc; - uc_err err; - - //// 初始化 X86-32bit 模式模拟器 - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - - if (!err) - cout << "uc引擎创建成功" << endl; - - //// 关闭uc - err = uc_close(uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_close() with error returned: %u\n", err); - return -1; - } - - if (!err) - cout << "uc引擎关闭成功" << endl; - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/dqKBwAWUL7XvypE.png) - - - -### uc_close - -```c -uc_err uc_close(uc_engine *uc); -``` - -关闭一个uc实例,将释放内存。关闭后无法恢复。 - -``` -@uc: 指向由 uc_open() 返回的指针 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_close(uc_engine *uc) -{ - int i; - struct list_item *cur; - struct hook *hook; - - // 清理内部数据 - if (uc->release) - uc->release(uc->tcg_ctx); - g_free(uc->tcg_ctx); - - // 清理 CPU. - g_free(uc->cpu->tcg_as_listener); - g_free(uc->cpu->thread); - - // 清理所有 objects. - OBJECT(uc->machine_state->accelerator)->ref = 1; - OBJECT(uc->machine_state)->ref = 1; - OBJECT(uc->owner)->ref = 1; - OBJECT(uc->root)->ref = 1; - - object_unref(uc, OBJECT(uc->machine_state->accelerator)); - object_unref(uc, OBJECT(uc->machine_state)); - object_unref(uc, OBJECT(uc->cpu)); - object_unref(uc, OBJECT(&uc->io_mem_notdirty)); - object_unref(uc, OBJECT(&uc->io_mem_unassigned)); - object_unref(uc, OBJECT(&uc->io_mem_rom)); - object_unref(uc, OBJECT(uc->root)); - - // 释放内存 - g_free(uc->system_memory); - - // 释放相关线程 - if (uc->qemu_thread_data) - g_free(uc->qemu_thread_data); - - // 释放其他数据 - free(uc->l1_map); - - if (uc->bounce.buffer) { - free(uc->bounce.buffer); - } - - g_hash_table_foreach(uc->type_table, free_table, uc); - g_hash_table_destroy(uc->type_table); - - for (i = 0; i < DIRTY_MEMORY_NUM; i++) { - free(uc->ram_list.dirty_memory[i]); - } - - // 释放hook和hook列表 - for (i = 0; i < UC_HOOK_MAX; i++) { - cur = uc->hook[i].head; - // hook 可存在于多个列表,可通过计数获取释放的时间 - while (cur) { - hook = (struct hook *)cur->data; - if (--hook->refs == 0) { - free(hook); - } - cur = cur->next; - } - list_clear(&uc->hook[i]); - } - - free(uc->mapped_blocks); - - // 最后释放uc自身 - memset(uc, 0, sizeof(*uc)); - free(uc); - - return UC_ERR_OK; -} -``` - -使用实例同uc_open() - - - -### uc_query - -```c -uc_err uc_query(uc_engine *uc, uc_query_type type, size_t *result); -``` - -查询引擎的内部状态 - -``` - @uc: uc_open() 返回的句柄 - @type: uc_query_type 中枚举的类型 - - @result: 保存被查询的内部状态的指针 - - @return: 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_query(uc_engine *uc, uc_query_type type, size_t *result) -{ - if (type == UC_QUERY_PAGE_SIZE) { - *result = uc->target_page_size; - return UC_ERR_OK; - } - - if (type == UC_QUERY_ARCH) { - *result = uc->arch; - return UC_ERR_OK; - } - - switch(uc->arch) { -#ifdef UNICORN_HAS_ARM - case UC_ARCH_ARM: - return uc->query(uc, type, result); -#endif - default: - return UC_ERR_ARG; - } - - return UC_ERR_OK; -} -``` - -使用示例: - -```cpp -#include -#include "unicorn/unicorn.h" -using namespace std; -int main() -{ - uc_engine* uc; - uc_err err; - - //// Initialize emulator in X86-32bit mode - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例创建成功" << endl; - - size_t result[] = {0}; - err = uc_query(uc, UC_QUERY_ARCH, result); // 查询架构 - if (!err) - cout << "查询成功: " << *result << endl; - - err = uc_close(uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_close() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例关闭成功" << endl; - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/ZtRKvUoaPTlshJ4.png) - -架构查询结果为4,对应的正是UC_ARCH_X86 - - - -### uc_errno - -```c -uc_err uc_errno(uc_engine *uc); -``` - -当某个API函数失败时,报告最后的错误号,一旦被访问,uc_errno可能不会保留原来的值。 - -``` -@uc: uc_open() 返回的句柄 - -@return: 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_errno(uc_engine *uc) -{ - return uc->errnum; -} -``` - -使用示例: - -```cpp -#include -#include "unicorn/unicorn.h" -using namespace std; - -int main() -{ - uc_engine* uc; - uc_err err; - - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例创建成功" << endl; - - err = uc_errno(uc); - cout << "错误号: " << err << endl; - - err = uc_close(uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_close() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例关闭成功" << endl; - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/IZhyWrGebA5tT4i.png) - -无错误,输出错误号为0 - - - -### uc_strerror - -```c -const char *uc_strerror(uc_err code); -``` - -返回给定错误号的解释 - -``` - @code: 错误号 - - @return: 指向给定错误号的解释的字符串指针 -``` - -源码实现 - -```cpp -const char *uc_strerror(uc_err code) -{ - switch(code) { - default: - return "Unknown error code"; - case UC_ERR_OK: - return "OK (UC_ERR_OK)"; - case UC_ERR_NOMEM: - return "No memory available or memory not present (UC_ERR_NOMEM)"; - case UC_ERR_ARCH: - return "Invalid/unsupported architecture (UC_ERR_ARCH)"; - case UC_ERR_HANDLE: - return "Invalid handle (UC_ERR_HANDLE)"; - case UC_ERR_MODE: - return "Invalid mode (UC_ERR_MODE)"; - case UC_ERR_VERSION: - return "Different API version between core & binding (UC_ERR_VERSION)"; - case UC_ERR_READ_UNMAPPED: - return "Invalid memory read (UC_ERR_READ_UNMAPPED)"; - case UC_ERR_WRITE_UNMAPPED: - return "Invalid memory write (UC_ERR_WRITE_UNMAPPED)"; - case UC_ERR_FETCH_UNMAPPED: - return "Invalid memory fetch (UC_ERR_FETCH_UNMAPPED)"; - case UC_ERR_HOOK: - return "Invalid hook type (UC_ERR_HOOK)"; - case UC_ERR_INSN_INVALID: - return "Invalid instruction (UC_ERR_INSN_INVALID)"; - case UC_ERR_MAP: - return "Invalid memory mapping (UC_ERR_MAP)"; - case UC_ERR_WRITE_PROT: - return "Write to write-protected memory (UC_ERR_WRITE_PROT)"; - case UC_ERR_READ_PROT: - return "Read from non-readable memory (UC_ERR_READ_PROT)"; - case UC_ERR_FETCH_PROT: - return "Fetch from non-executable memory (UC_ERR_FETCH_PROT)"; - case UC_ERR_ARG: - return "Invalid argument (UC_ERR_ARG)"; - case UC_ERR_READ_UNALIGNED: - return "Read from unaligned memory (UC_ERR_READ_UNALIGNED)"; - case UC_ERR_WRITE_UNALIGNED: - return "Write to unaligned memory (UC_ERR_WRITE_UNALIGNED)"; - case UC_ERR_FETCH_UNALIGNED: - return "Fetch from unaligned memory (UC_ERR_FETCH_UNALIGNED)"; - case UC_ERR_RESOURCE: - return "Insufficient resource (UC_ERR_RESOURCE)"; - case UC_ERR_EXCEPTION: - return "Unhandled CPU exception (UC_ERR_EXCEPTION)"; - case UC_ERR_TIMEOUT: - return "Emulation timed out (UC_ERR_TIMEOUT)"; - } -} -``` - -使用示例: - -```cpp -#include -#include "unicorn/unicorn.h" -using namespace std; - -int main() -{ - uc_engine* uc; - uc_err err; - - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例创建成功" << endl; - - err = uc_errno(uc); - cout << "错误号: " << err << " 错误描述: " << uc_strerror(err) <reg_write) - ret = uc->reg_write(uc, (unsigned int *)ids, vals, count); //结构体中写入 - else - return UC_ERR_EXCEPTION; - - return ret; -} -``` - -使用示例: - -```cpp -#include -#include "unicorn/unicorn.h" -using namespace std; - -int main() -{ - uc_engine* uc; - uc_err err; - - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例创建成功" << endl; - - int r_eax = 0x12; - err = uc_reg_write(uc, UC_X86_REG_ECX, &r_eax); - if (!err) - cout << "写入成功: " << r_eax << endl; - - err = uc_close(uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_close() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例关闭成功" << endl; - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/DkztJcigHCdmnRp.png) - - - -### uc_reg_read - -```c -uc_err uc_reg_read(uc_engine *uc, int regid, void *value); -``` - -读取寄存器的值 - -``` -@uc: uc_open()返回的句柄 -@regid: 将被读取的寄存器ID -@value: 指向保存寄存器值的指针 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_reg_read(uc_engine *uc, int regid, void *value) -{ - return uc_reg_read_batch(uc, ®id, &value, 1); -} - -uc_err uc_reg_read_batch(uc_engine *uc, int *ids, void **vals, int count) -{ - if (uc->reg_read) - uc->reg_read(uc, (unsigned int *)ids, vals, count); - else - return -1; - - return UC_ERR_OK; -} -``` - -使用示例: - -```cpp -#include -#include "unicorn/unicorn.h" -using namespace std; - -int main() -{ - uc_engine* uc; - uc_err err; - - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例创建成功" << endl; - - int r_eax = 0x12; - err = uc_reg_write(uc, UC_X86_REG_ECX, &r_eax); - if (!err) - cout << "写入成功: " << r_eax << endl; - - int recv_eax; - err = uc_reg_read(uc, UC_X86_REG_ECX, &recv_eax); - if (!err) - cout << "读取成功: " << recv_eax << endl; - - err = uc_close(uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_close() with error returned: %u\n", err); - return -1; - } - if (!err) - cout << "uc实例关闭成功" << endl; - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/ABkexFCfphu3zIg.png) - - - -### uc_reg_write_batch - -```c -uc_err uc_reg_write_batch(uc_engine *uc, int *regs, void *const *vals, int count); -``` - -同时将多个值写入多个寄存器 - -``` -@uc: uc_open()返回的句柄 -@regid: 存储将被写入的多个寄存器ID的数组 -@value: 指向保存多个值的数组的指针 -@count: *regs 和 *vals 数组的长度 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_reg_write_batch(uc_engine *uc, int *ids, void *const *vals, int count) -{ - int ret = UC_ERR_OK; - if (uc->reg_write) - ret = uc->reg_write(uc, (unsigned int *)ids, vals, count); - else - return UC_ERR_EXCEPTION; - - return ret; -} -``` - -使用示例: - -```cpp -#include -#include -#include "unicorn/unicorn.h" -using namespace std; - -int syscall_abi[] = { - UC_X86_REG_RAX, UC_X86_REG_RDI, UC_X86_REG_RSI, UC_X86_REG_RDX, - UC_X86_REG_R10, UC_X86_REG_R8, UC_X86_REG_R9 -}; - -uint64_t vals[7] = { 200, 10, 11, 12, 13, 14, 15 }; - -void* ptrs[7]; - -int main() -{ - int i; - uc_err err; - uc_engine* uc; - - // set up register pointers - for (i = 0; i < 7; i++) { - ptrs[i] = &vals[i]; - } - - if ((err = uc_open(UC_ARCH_X86, UC_MODE_64, &uc))) { - uc_perror("uc_open", err); - return 1; - } - - // reg_write_batch - printf("reg_write_batch({200, 10, 11, 12, 13, 14, 15})\n"); - if ((err = uc_reg_write_batch(uc, syscall_abi, ptrs, 7))) { - uc_perror("uc_reg_write_batch", err); - return 1; - } - - // reg_read_batch - memset(vals, 0, sizeof(vals)); - if ((err = uc_reg_read_batch(uc, syscall_abi, ptrs, 7))) { - uc_perror("uc_reg_read_batch", err); - return 1; - } - - printf("reg_read_batch = {"); - - for (i = 0; i < 7; i++) { - if (i != 0) printf(", "); - printf("%" PRIu64, vals[i]); - } - - printf("}\n"); - - uint64_t var[7] = { 0 }; - for (int i = 0; i < 7; i++) - { - cout << syscall_abi[i] << " "; - printf("%" PRIu64, vals[i]); - cout << endl; - } - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/l1AhdxgKE2U3tZB.png) - - - -### uc_reg_read_batch - -```c -uc_err uc_reg_read_batch(uc_engine *uc, int *regs, void **vals, int count); -``` - -同时读取多个寄存器的值。 - -``` -@uc: uc_open()返回的句柄 -@regid: 存储将被读取的多个寄存器ID的数组 -@value: 指向保存多个值的数组的指针 -@count: *regs 和 *vals 数组的长度 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_reg_read_batch(uc_engine *uc, int *ids, void **vals, int count) -{ - if (uc->reg_read) - uc->reg_read(uc, (unsigned int *)ids, vals, count); - else - return -1; - - return UC_ERR_OK; -} -``` - -使用示例同uc_reg_write_batch()。 - - - -### uc_mem_write - -```c -uc_err uc_mem_write(uc_engine *uc, uint64_t address, const void *bytes, size_t size); -``` - -在内存中写入一段字节码。 - -``` - @uc: uc_open() 返回的句柄 - @address: 写入字节的起始地址 - @bytes: 指向一个包含要写入内存的数据的指针 - @size: 要写入的内存大小。 - - 注意: @bytes 必须足够大以包含 @size 字节。 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_mem_write(uc_engine *uc, uint64_t address, const void *_bytes, size_t size) -{ - size_t count = 0, len; - const uint8_t *bytes = _bytes; - - if (uc->mem_redirect) { - address = uc->mem_redirect(address); - } - - if (!check_mem_area(uc, address, size)) - return UC_ERR_WRITE_UNMAPPED; - - // 内存区域可以重叠相邻的内存块 - while(count < size) { - MemoryRegion *mr = memory_mapping(uc, address); - if (mr) { - uint32_t operms = mr->perms; - if (!(operms & UC_PROT_WRITE)) // 没有写保护 - // 标记为可写 - uc->readonly_mem(mr, false); - - len = (size_t)MIN(size - count, mr->end - address); - if (uc->write_mem(&uc->as, address, bytes, len) == false) - break; - - if (!(operms & UC_PROT_WRITE)) // 没有写保护 - // 设置写保护 - uc->readonly_mem(mr, true); - - count += len; - address += len; - bytes += len; - } else // 此地址尚未被映射 - break; - } - - if (count == size) - return UC_ERR_OK; - else - return UC_ERR_WRITE_UNMAPPED; -} -``` - -使用示例: - -```cpp -#include -#include -#include "unicorn/unicorn.h" -using namespace std; - -#define X86_CODE32 "\x41\x4a" // INC ecx; DEC edx -#define ADDRESS 0x1000 - -int main() -{ - uc_engine* uc; - uc_err err; - - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - - uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); - - if (uc_mem_write(uc, ADDRESS, X86_CODE32, sizeof(X86_CODE32) - 1)) { - printf("Failed to write emulation code to memory, quit!\n"); - return -1; - } - - uint32_t code; - - if(uc_mem_read(uc,ADDRESS,&code, sizeof(code))) { - printf("Failed to read emulation code to memory, quit!\n"); - return -1; - } - - cout << hex << code << endl; - - err = uc_close(uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_close() with error returned: %u\n", err); - return -1; - } - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/l4HhgDzcJIVvFNU.png) - - - -### uc_mem_read - -```c -uc_err uc_mem_read(uc_engine *uc, uint64_t address, void *bytes, size_t size); -``` - -从内存中读取字节。 - -``` - @uc: uc_open() 返回的句柄 - @address: 读取字节的起始地址 - @bytes: 指向一个包含要读取内存的数据的指针 - @size: 要读取的内存大小。 - - 注意: @bytes 必须足够大以包含 @size 字节。 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_mem_read(uc_engine *uc, uint64_t address, void *_bytes, size_t size) -{ - size_t count = 0, len; - uint8_t *bytes = _bytes; - - if (uc->mem_redirect) { - address = uc->mem_redirect(address); - } - - if (!check_mem_area(uc, address, size)) - return UC_ERR_READ_UNMAPPED; - - // 内存区域可以重叠相邻的内存块 - while(count < size) { - MemoryRegion *mr = memory_mapping(uc, address); - if (mr) { - len = (size_t)MIN(size - count, mr->end - address); - if (uc->read_mem(&uc->as, address, bytes, len) == false) - break; - count += len; - address += len; - bytes += len; - } else // 此地址尚未被映射 - break; - } - - if (count == size) - return UC_ERR_OK; - else - return UC_ERR_READ_UNMAPPED; -} -``` - -使用示例同uc_mem_write() - - - -### uc_emu_start - -```c -uc_err uc_emu_start(uc_engine *uc, uint64_t begin, uint64_t until, uint64_t timeout, size_t count); -``` - -在指定的时间内模拟机器码。 - -``` -@uc: uc_open() 返回的句柄 -@begin: 开始模拟的地址 -@until: 模拟停止的地址 (当到达该地址时) -@timeout: 模拟代码的持续时间(以微秒计)。当这个值为0时,将在无限时间内模拟代码,直到代码完成。 -@count: 要模拟的指令数。当这个值为0时,将模拟所有可用的代码,直到代码完成 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_emu_start(uc_engine* uc, uint64_t begin, uint64_t until, uint64_t timeout, size_t count) -{ - // 重制计数器 - uc->emu_counter = 0; - uc->invalid_error = UC_ERR_OK; - uc->block_full = false; - uc->emulation_done = false; - uc->timed_out = false; - - switch(uc->arch) { - default: - break; -#ifdef UNICORN_HAS_M68K - case UC_ARCH_M68K: - uc_reg_write(uc, UC_M68K_REG_PC, &begin); - break; -#endif -#ifdef UNICORN_HAS_X86 - case UC_ARCH_X86: - switch(uc->mode) { - default: - break; - case UC_MODE_16: { - uint64_t ip; - uint16_t cs; - - uc_reg_read(uc, UC_X86_REG_CS, &cs); - // 抵消后面增加的 IP 和 CS - ip = begin - cs*16; - uc_reg_write(uc, UC_X86_REG_IP, &ip); - break; - } - case UC_MODE_32: - uc_reg_write(uc, UC_X86_REG_EIP, &begin); - break; - case UC_MODE_64: - uc_reg_write(uc, UC_X86_REG_RIP, &begin); - break; - } - break; -#endif -#ifdef UNICORN_HAS_ARM - case UC_ARCH_ARM: - uc_reg_write(uc, UC_ARM_REG_R15, &begin); - break; -#endif -#ifdef UNICORN_HAS_ARM64 - case UC_ARCH_ARM64: - uc_reg_write(uc, UC_ARM64_REG_PC, &begin); - break; -#endif -#ifdef UNICORN_HAS_MIPS - case UC_ARCH_MIPS: - // TODO: MIPS32/MIPS64/BIGENDIAN etc - uc_reg_write(uc, UC_MIPS_REG_PC, &begin); - break; -#endif -#ifdef UNICORN_HAS_SPARC - case UC_ARCH_SPARC: - // TODO: Sparc/Sparc64 - uc_reg_write(uc, UC_SPARC_REG_PC, &begin); - break; -#endif - } - - uc->stop_request = false; - - uc->emu_count = count; - // 如果不需要计数,则移除计数挂钩hook - if (count <= 0 && uc->count_hook != 0) { - uc_hook_del(uc, uc->count_hook); - uc->count_hook = 0; - } - // 设置计数hook记录指令数 - if (count > 0 && uc->count_hook == 0) { - uc_err err; - // 对计数指令的回调必须在所有其他操作之前运行,因此必须在hook列表的开头插入hook,而不是附加hook - uc->hook_insert = 1; - err = uc_hook_add(uc, &uc->count_hook, UC_HOOK_CODE, hook_count_cb, NULL, 1, 0); - // 恢复到 uc_hook_add() - uc->hook_insert = 0; - if (err != UC_ERR_OK) { - return err; - } - } - - uc->addr_end = until; - - if (timeout) - enable_emu_timer(uc, timeout * 1000); // microseconds -> nanoseconds - - if (uc->vm_start(uc)) { - return UC_ERR_RESOURCE; - } - - // 模拟完成 - uc->emulation_done = true; - - if (timeout) { - // 等待超时 - qemu_thread_join(&uc->timer); - } - - if(uc->timed_out) - return UC_ERR_TIMEOUT; - - return uc->invalid_error; -} -``` - -使用示例: - -```cpp -#include -#include -#include "unicorn/unicorn.h" -using namespace std; - -#define X86_CODE32 "\x33\xC0" // xor eax, eax -#define ADDRESS 0x1000 - -int main() -{ - uc_engine* uc; - uc_err err; - - int r_eax = 0x111; - - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_open() with error returned: %u\n", err); - return -1; - } - - uc_mem_map(uc, ADDRESS, 2 * 1024 * 1024, UC_PROT_ALL); - - if (uc_mem_write(uc, ADDRESS, X86_CODE32, sizeof(X86_CODE32) - 1)) { - printf("Failed to write emulation code to memory, quit!\n"); - return -1; - } - - uc_reg_write(uc, UC_X86_REG_EAX, &r_eax); - printf(">>> before EAX = 0x%x\n", r_eax); - - err = uc_emu_start(uc, ADDRESS, ADDRESS + sizeof(X86_CODE32) - 1, 0, 0); - if (err) { - printf("Failed on uc_emu_start() with error returned %u: %s\n", - err, uc_strerror(err)); - } - - uc_reg_read(uc, UC_X86_REG_EAX, &r_eax); - printf(">>> after EAX = 0x%x\n", r_eax); - - err = uc_close(uc); - if (err != UC_ERR_OK) { - printf("Failed on uc_close() with error returned: %u\n", err); - return -1; - } - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/K4HMijIVt6lofvT.png) - - - -### uc_emu_stop - -```c -uc_err uc_emu_stop(uc_engine *uc); -``` - -停止模拟 - -通常是从通过 tracing API注册的回调函数中调用。 - -``` -@uc: uc_open() 返回的句柄 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_emu_stop(uc_engine *uc) -{ - if (uc->emulation_done) - return UC_ERR_OK; - - uc->stop_request = true; - - if (uc->current_cpu) { - // 退出当前线程 - cpu_exit(uc->current_cpu); - } - - return UC_ERR_OK; -} -``` - -使用示例: - -```cpp -uc_emu_stop(uc); -``` - - - -### uc_hook_add - -```c -uc_err uc_hook_add(uc_engine *uc, uc_hook *hh, int type, void *callback, - void *user_data, uint64_t begin, uint64_t end, ...); -``` - -注册hook事件的回调,当hook事件被触发将会进行回调。 - -``` - @uc: uc_open() 返回的句柄 - @hh: 注册hook得到的句柄. uc_hook_del() 中使用 - @type: hook 类型 - @callback: 当指令被命中时要运行的回调 - @user_data: 用户自定义数据. 将被传递给回调函数的最后一个参数 @user_data - @begin: 回调生效区域的起始地址(包括) - @end: 回调生效区域的结束地址(包括) - 注意 1: 只有回调的地址在[@begin, @end]中才会调用回调 - 注意 2: 如果 @begin > @end, 每当触发此hook类型时都会调用回调 - @...: 变量参数 (取决于 @type) - 注意: 如果 @type = UC_HOOK_INSN, 这里是指令ID (如: UC_X86_INS_OUT) - - @return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_hook_add(uc_engine *uc, uc_hook *hh, int type, void *callback, - void *user_data, uint64_t begin, uint64_t end, ...) -{ - int ret = UC_ERR_OK; - int i = 0; - - struct hook *hook = calloc(1, sizeof(struct hook)); - if (hook == NULL) { - return UC_ERR_NOMEM; - } - - hook->begin = begin; - hook->end = end; - hook->type = type; - hook->callback = callback; - hook->user_data = user_data; - hook->refs = 0; - *hh = (uc_hook)hook; - - // UC_HOOK_INSN 有一个额外参数:指令ID - if (type & UC_HOOK_INSN) { - va_list valist; - - va_start(valist, end); - hook->insn = va_arg(valist, int); - va_end(valist); - - if (uc->insn_hook_validate) { - if (! uc->insn_hook_validate(hook->insn)) { - free(hook); - return UC_ERR_HOOK; - } - } - - if (uc->hook_insert) { - if (list_insert(&uc->hook[UC_HOOK_INSN_IDX], hook) == NULL) { - free(hook); - return UC_ERR_NOMEM; - } - } else { - if (list_append(&uc->hook[UC_HOOK_INSN_IDX], hook) == NULL) { - free(hook); - return UC_ERR_NOMEM; - } - } - - hook->refs++; - return UC_ERR_OK; - } - - while ((type >> i) > 0) { - if ((type >> i) & 1) { - if (i < UC_HOOK_MAX) { - if (uc->hook_insert) { - if (list_insert(&uc->hook[i], hook) == NULL) { - if (hook->refs == 0) { - free(hook); - } - return UC_ERR_NOMEM; - } - } else { - if (list_append(&uc->hook[i], hook) == NULL) { - if (hook->refs == 0) { - free(hook); - } - return UC_ERR_NOMEM; - } - } - hook->refs++; - } - } - i++; - } - - if (hook->refs == 0) { - free(hook); - } - - return ret; -} -``` - -使用示例: - -```cpp -#include -#include -#include "unicorn/unicorn.h" -using namespace std; - -int syscall_abi[] = { - UC_X86_REG_RAX, UC_X86_REG_RDI, UC_X86_REG_RSI, UC_X86_REG_RDX, - UC_X86_REG_R10, UC_X86_REG_R8, UC_X86_REG_R9 -}; - -uint64_t vals[7] = { 200, 10, 11, 12, 13, 14, 15 }; - -void* ptrs[7]; - -void uc_perror(const char* func, uc_err err) -{ - fprintf(stderr, "Error in %s(): %s\n", func, uc_strerror(err)); -} - -#define BASE 0x10000 - -// mov rax, 100; mov rdi, 1; mov rsi, 2; mov rdx, 3; mov r10, 4; mov r8, 5; mov r9, 6; syscall -#define CODE "\x48\xc7\xc0\x64\x00\x00\x00\x48\xc7\xc7\x01\x00\x00\x00\x48\xc7\xc6\x02\x00\x00\x00\x48\xc7\xc2\x03\x00\x00\x00\x49\xc7\xc2\x04\x00\x00\x00\x49\xc7\xc0\x05\x00\x00\x00\x49\xc7\xc1\x06\x00\x00\x00\x0f\x05" - -void hook_syscall(uc_engine* uc, void* user_data) -{ - int i; - - uc_reg_read_batch(uc, syscall_abi, ptrs, 7); - - printf("syscall: {"); - - for (i = 0; i < 7; i++) { - if (i != 0) printf(", "); - printf("%" PRIu64, vals[i]); - } - - printf("}\n"); -} - -void hook_code(uc_engine* uc, uint64_t addr, uint32_t size, void* user_data) -{ - printf("HOOK_CODE: 0x%" PRIx64 ", 0x%x\n", addr, size); -} - -int main() -{ - int i; - uc_hook sys_hook; - uc_err err; - uc_engine* uc; - - for (i = 0; i < 7; i++) { - ptrs[i] = &vals[i]; - } - - if ((err = uc_open(UC_ARCH_X86, UC_MODE_64, &uc))) { - uc_perror("uc_open", err); - return 1; - } - - printf("reg_write_batch({200, 10, 11, 12, 13, 14, 15})\n"); - if ((err = uc_reg_write_batch(uc, syscall_abi, ptrs, 7))) { - uc_perror("uc_reg_write_batch", err); - return 1; - } - - memset(vals, 0, sizeof(vals)); - if ((err = uc_reg_read_batch(uc, syscall_abi, ptrs, 7))) { - uc_perror("uc_reg_read_batch", err); - return 1; - } - - printf("reg_read_batch = {"); - - for (i = 0; i < 7; i++) { - if (i != 0) printf(", "); - printf("%" PRIu64, vals[i]); - } - - printf("}\n"); - - // syscall - printf("\n"); - printf("running syscall shellcode\n"); - - if ((err = uc_hook_add(uc, &sys_hook, UC_HOOK_CODE, hook_syscall, NULL, 1, 0))) { - uc_perror("uc_hook_add", err); - return 1; - } - - if ((err = uc_mem_map(uc, BASE, 0x1000, UC_PROT_ALL))) { - uc_perror("uc_mem_map", err); - return 1; - } - - if ((err = uc_mem_write(uc, BASE, CODE, sizeof(CODE) - 1))) { - uc_perror("uc_mem_write", err); - return 1; - } - - if ((err = uc_emu_start(uc, BASE, BASE + sizeof(CODE) - 1, 0, 0))) { - uc_perror("uc_emu_start", err); - return 1; - } - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/aU1lbmxMjXA5g3K.png) - -对每条指令都进行hook - - - -### uc_hook_del - -``` -uc_err uc_hook_del(uc_engine *uc, uc_hook hh); -``` - -删除一个已注册的hook事件 - -``` -@uc: uc_open() 返回的句柄 -@hh: uc_hook_add() 返回的句柄 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_hook_del(uc_engine *uc, uc_hook hh) -{ - int i; - struct hook *hook = (struct hook *)hh; - - for (i = 0; i < UC_HOOK_MAX; i++) { - if (list_remove(&uc->hook[i], (void *)hook)) { - if (--hook->refs == 0) { - free(hook); - break; - } - } - } - return UC_ERR_OK; -} -``` - -使用示例: - -```cpp -if ((err = uc_hook_add(uc, &sys_hook, UC_HOOK_CODE, hook_syscall, NULL, 1, 0))) { - uc_perror("uc_hook_add", err); - return 1; -} - -if ((err = uc_hook_del(uc, &sys_hook))) { - uc_perror("uc_hook_del", err); - return 1; -} -``` - - - -### uc_mem_map - -```c -uc_err uc_mem_map(uc_engine *uc, uint64_t address, size_t size, uint32_t perms); -``` - -为模拟映射一块内存。 - -``` -@uc: uc_open() 返回的句柄 -@address: 要映射到的新内存区域的起始地址。这个地址必须与4KB对齐,否则将返回UC_ERR_ARG错误。 -@size: 要映射到的新内存区域的大小。这个大小必须是4KB的倍数,否则将返回UC_ERR_ARG错误。 -@perms: 新映射区域的权限。参数必须是UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC或这些的组合,否则返回UC_ERR_ARG错误。 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_mem_map(uc_engine *uc, uint64_t address, size_t size, uint32_t perms) -{ - uc_err res; - - if (uc->mem_redirect) { - address = uc->mem_redirect(address); - } - - res = mem_map_check(uc, address, size, perms); //内存安全检查 - if (res) - return res; - - return mem_map(uc, address, size, perms, uc->memory_map(uc, address, size, perms)); -} -``` - -使用示例同uc_hook_add。 - - - -### uc_mem_map_ptr - -```c -uc_err uc_mem_map_ptr(uc_engine *uc, uint64_t address, size_t size, uint32_t perms, void *ptr); -``` - -在模拟中映射现有的主机内存。 - -``` -@uc: uc_open() 返回的句柄 -@address: 要映射到的新内存区域的起始地址。这个地址必须与4KB对齐,否则将返回UC_ERR_ARG错误。 -@size: 要映射到的新内存区域的大小。这个大小必须是4KB的倍数,否则将返回UC_ERR_ARG错误。 -@perms: 新映射区域的权限。参数必须是UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC或这些的组合,否则返回UC_ERR_ARG错误。 -@ptr: 指向支持新映射内存的主机内存的指针。映射的主机内存的大小应该与size的大小相同或更大,并且至少使用PROT_READ | PROT_WRITE进行映射,否则不定义映射。 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_mem_map_ptr(uc_engine *uc, uint64_t address, size_t size, uint32_t perms, void *ptr) -{ - uc_err res; - - if (ptr == NULL) - return UC_ERR_ARG; - - if (uc->mem_redirect) { - address = uc->mem_redirect(address); - } - - res = mem_map_check(uc, address, size, perms); //内存安全检查 - if (res) - return res; - - return mem_map(uc, address, size, UC_PROT_ALL, uc->memory_map_ptr(uc, address, size, perms, ptr)); -} -``` - -使用示例同uc_mem_map - - - -### uc_mem_unmap - -```c -uc_err uc_mem_unmap(uc_engine *uc, uint64_t address, size_t size); -``` - -取消对模拟内存区域的映射 - -``` -@uc: uc_open() 返回的句柄 -@address: 要映射到的新内存区域的起始地址。这个地址必须与4KB对齐,否则将返回UC_ERR_ARG错误。 -@size: 要映射到的新内存区域的大小。这个大小必须是4KB的倍数,否则将返回UC_ERR_ARG错误。 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_mem_unmap(struct uc_struct *uc, uint64_t address, size_t size) -{ - MemoryRegion *mr; - uint64_t addr; - size_t count, len; - - if (size == 0) - // 没有要取消映射的区域 - return UC_ERR_OK; - - // 地址必须对齐到 uc->target_page_size - if ((address & uc->target_page_align) != 0) - return UC_ERR_ARG; - - // 大小必须是 uc->target_page_size 的倍数 - if ((size & uc->target_page_align) != 0) - return UC_ERR_ARG; - - if (uc->mem_redirect) { - address = uc->mem_redirect(address); - } - - // 检查用户请求的整个块是否被映射 - if (!check_mem_area(uc, address, size)) - return UC_ERR_NOMEM; - - // 如果这个区域跨越了相邻的区域,可能需要分割区域 - addr = address; - count = 0; - while(count < size) { - mr = memory_mapping(uc, addr); - len = (size_t)MIN(size - count, mr->end - addr); - if (!split_region(uc, mr, addr, len, true)) - return UC_ERR_NOMEM; - - // 取消映射 - mr = memory_mapping(uc, addr); - if (mr != NULL) - uc->memory_unmap(uc, mr); - count += len; - addr += len; - } - - return UC_ERR_OK; -} -``` - -使用示例: - -```cpp -if ((err = uc_mem_map(uc, BASE, 0x1000, UC_PROT_ALL))) { - uc_perror("uc_mem_map", err); - return 1; -} - -if ((err = uc_mem_unmap(uc, BASE, 0x1000))) { - uc_perror("uc_mem_unmap", err); - return 1; -} -``` - - - -### uc_mem_protect - -```c -uc_err uc_mem_protect(uc_engine *uc, uint64_t address, size_t size, uint32_t perms); -``` - -设置模拟内存的权限 - -``` -@uc: uc_open() 返回的句柄 -@address: 要映射到的新内存区域的起始地址。这个地址必须与4KB对齐,否则将返回UC_ERR_ARG错误。 -@size: 要映射到的新内存区域的大小。这个大小必须是4KB的倍数,否则将返回UC_ERR_ARG错误。 -@perms: 映射区域的新权限。参数必须是UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC或这些的组合,否则返回UC_ERR_ARG错误。 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_mem_protect(struct uc_struct *uc, uint64_t address, size_t size, uint32_t perms) -{ - MemoryRegion *mr; - uint64_t addr = address; - size_t count, len; - bool remove_exec = false; - - if (size == 0) - // trivial case, no change - return UC_ERR_OK; - - // address must be aligned to uc->target_page_size - if ((address & uc->target_page_align) != 0) - return UC_ERR_ARG; - - // size must be multiple of uc->target_page_size - if ((size & uc->target_page_align) != 0) - return UC_ERR_ARG; - - // check for only valid permissions - if ((perms & ~UC_PROT_ALL) != 0) - return UC_ERR_ARG; - - if (uc->mem_redirect) { - address = uc->mem_redirect(address); - } - - // check that user's entire requested block is mapped - if (!check_mem_area(uc, address, size)) - return UC_ERR_NOMEM; - - // Now we know entire region is mapped, so change permissions - // We may need to split regions if this area spans adjacent regions - addr = address; - count = 0; - while(count < size) { - mr = memory_mapping(uc, addr); - len = (size_t)MIN(size - count, mr->end - addr); - if (!split_region(uc, mr, addr, len, false)) - return UC_ERR_NOMEM; - - mr = memory_mapping(uc, addr); - // will this remove EXEC permission? - if (((mr->perms & UC_PROT_EXEC) != 0) && ((perms & UC_PROT_EXEC) == 0)) - remove_exec = true; - mr->perms = perms; - uc->readonly_mem(mr, (perms & UC_PROT_WRITE) == 0); - - count += len; - addr += len; - } - - // if EXEC permission is removed, then quit TB and continue at the same place - if (remove_exec) { - uc->quit_request = true; - uc_emu_stop(uc); - } - - return UC_ERR_OK; -} -``` - -使用示例: - -```cpp -if ((err = uc_mem_protect(uc, BASE, 0x1000, UC_PROT_ALL))) { //可读可写可执行 - uc_perror("uc_mem_protect", err); - return 1; -} -``` - - - -### uc_mem_regions - -```c -uc_err uc_mem_regions(uc_engine *uc, uc_mem_region **regions, uint32_t *count); -``` - -检索由 uc_mem_map() 和 uc_mem_map_ptr() 映射的内存的信息。 - -这个API为@regions分配内存,用户之后必须通过free()释放这些内存来避免内存泄漏。 - -``` -@uc: uc_open() 返回的句柄 -@regions: 指向 uc_mem_region 结构体的数组的指针. 由Unicorn申请,必须通过uc_free()释放这些内存 -@count: 指向@regions中包含的uc_mem_region结构体的数量的指针 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码分析 - -```c -uint32_t uc_mem_regions(uc_engine *uc, uc_mem_region **regions, uint32_t *count) -{ - uint32_t i; - uc_mem_region *r = NULL; - - *count = uc->mapped_block_count; - - if (*count) { - r = g_malloc0(*count * sizeof(uc_mem_region)); - if (r == NULL) { - // 内存不足 - return UC_ERR_NOMEM; - } - } - - for (i = 0; i < *count; i++) { - r[i].begin = uc->mapped_blocks[i]->addr; - r[i].end = uc->mapped_blocks[i]->end - 1; - r[i].perms = uc->mapped_blocks[i]->perms; - } - - *regions = r; - - return UC_ERR_OK; -} -``` - -使用示例: - -```cpp -#include -#include -#include "unicorn/unicorn.h" -using namespace std; - -int main() -{ - uc_err err; - uc_engine* uc; - - if ((err = uc_open(UC_ARCH_X86, UC_MODE_64, &uc))) { - uc_perror("uc_open", err); - return 1; - } - - if ((err = uc_mem_map(uc, BASE, 0x1000, UC_PROT_ALL))) { - uc_perror("uc_mem_map", err); - return 1; - } - - uc_mem_region *region; - uint32_t count; - - if ((err = uc_mem_regions(uc, ®ion, &count))) { - uc_perror("uc_mem_regions", err); - return 1; - } - - cout << "起始地址: 0x" << hex << region->begin << " 结束地址: 0x" << hex << region->end << " 内存权限: " <perms << " 已申请内存块数: " << count << endl; - - if ((err = uc_free(region))) { ////注意释放内存 - uc_perror("uc_free", err); - return 1; - } - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/kbrF7NdV6LDxnYI.png) - - - -### uc_free - -```c -uc_err uc_free(void *mem); -``` - -释放由 uc_context_alloc 和 uc_mem_regions 申请的内存 - -``` -@mem: 由uc_context_alloc (返回 *context), 或由 uc_mem_regions (返回 *regions)申请的内存 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_free(void *mem) -{ - g_free(mem); - return UC_ERR_OK; -} - -void g_free(gpointer ptr) -{ - free(ptr); -} -``` - -使用示例同uc_mem_regions - - - -### uc_context_alloc - -```c -uc_err uc_context_alloc(uc_engine *uc, uc_context **context); -``` - -分配一个可以与uc_context_{save,restore}一起使用的区域来执行CPU上下文的快速保存/回滚,包括寄存器和内部元数据。上下文不能在具有不同架构或模式的引擎实例之间共享。 - -``` -@uc: uc_open() 返回的句柄 -@context: 指向uc_engine*的指针。当这个函数成功返回时,将使用指向新上下文的指针更新它。之后必须使用uc_free()释放这些分配的内存。 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_context_alloc(uc_engine *uc, uc_context **context) -{ - struct uc_context **_context = context; - size_t size = uc->cpu_context_size; - - *_context = g_malloc(size); - if (*_context) { - (*_context)->jmp_env_size = sizeof(*uc->cpu->jmp_env); - (*_context)->context_size = size - sizeof(uc_context) - (*_context)->jmp_env_size; - return UC_ERR_OK; - } else { - return UC_ERR_NOMEM; - } -} -``` - -使用示例 - -```cpp -#include -#include -#include "unicorn/unicorn.h" -using namespace std; - -#define ADDRESS 0x1000 -#define X86_CODE32_INC "\x40" // INC eax - -int main() -{ - uc_engine* uc; - uc_context* context; - uc_err err; - - int r_eax = 0x1; // EAX 寄存器 - - printf("===================================\n"); - printf("Save/restore CPU context in opaque blob\n"); - - err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc); - if (err) { - printf("Failed on uc_open() with error returned: %u\n", err); - return 0; - } - - uc_mem_map(uc, ADDRESS, 8 * 1024, UC_PROT_ALL); - - if (uc_mem_write(uc, ADDRESS, X86_CODE32_INC, sizeof(X86_CODE32_INC) - 1)) { - printf("Failed to write emulation code to memory, quit!\n"); - return 0; - } - - // 初始化寄存器 - uc_reg_write(uc, UC_X86_REG_EAX, &r_eax); - - printf(">>> Running emulation for the first time\n"); - - err = uc_emu_start(uc, ADDRESS, ADDRESS + sizeof(X86_CODE32_INC) - 1, 0, 0); - if (err) { - printf("Failed on uc_emu_start() with error returned %u: %s\n", - err, uc_strerror(err)); - } - - printf(">>> Emulation done. Below is the CPU context\n"); - - uc_reg_read(uc, UC_X86_REG_EAX, &r_eax); - printf(">>> EAX = 0x%x\n", r_eax); - - // 申请并保存 CPU 上下文 - printf(">>> Saving CPU context\n"); - - err = uc_context_alloc(uc, &context); - if (err) { - printf("Failed on uc_context_alloc() with error returned: %u\n", err); - return 0; - } - - err = uc_context_save(uc, context); - if (err) { - printf("Failed on uc_context_save() with error returned: %u\n", err); - return 0; - } - - printf(">>> Running emulation for the second time\n"); - - err = uc_emu_start(uc, ADDRESS, ADDRESS + sizeof(X86_CODE32_INC) - 1, 0, 0); - if (err) { - printf("Failed on uc_emu_start() with error returned %u: %s\n", - err, uc_strerror(err)); - } - - printf(">>> Emulation done. Below is the CPU context\n"); - - uc_reg_read(uc, UC_X86_REG_EAX, &r_eax); - printf(">>> EAX = 0x%x\n", r_eax); - - // 恢复 CPU 上下文 - err = uc_context_restore(uc, context); - if (err) { - printf("Failed on uc_context_restore() with error returned: %u\n", err); - return 0; - } - - printf(">>> CPU context restored. Below is the CPU context\n"); - - uc_reg_read(uc, UC_X86_REG_EAX, &r_eax); - printf(">>> EAX = 0x%x\n", r_eax); - - // 释放 CPU 上下文 - err = uc_free(context); - if (err) { - printf("Failed on uc_free() with error returned: %u\n", err); - return 0; - } - - uc_close(uc); - - return 0; -} -``` - -输出 - -![image.png](API_Doc_Pic/juNPWvwGUlraKRh.png) - - - -### uc_context_save - -```c -uc_err uc_context_save(uc_engine *uc, uc_context *context); -``` - -保存当前CPU上下文 - -``` -@uc: uc_open() 返回的句柄 -@context: uc_context_alloc() 返回的句柄 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_context_save(uc_engine *uc, uc_context *context) -{ - struct uc_context *_context = context; - memcpy(_context->data, uc->cpu->env_ptr, _context->size); - return UC_ERR_OK; -} -``` - -使用示例同uc_context_alloc() - - - -### uc_context_restore - -```c -uc_err uc_context_restore(uc_engine *uc, uc_context *context); -``` - -恢复已保存的CPU上下文 - -``` -@uc: uc_open() 返回的句柄 -@context: uc_context_alloc() 返回并且已使用 uc_context_save 保存的句柄 - -@return 成功则返回UC_ERR_OK , 否则返回 uc_err 枚举的其他错误类型 -``` - -源码实现 - -```c -uc_err uc_context_restore(uc_engine *uc, uc_context *context) -{ - struct uc_context *_context = context; - memcpy(uc->cpu->env_ptr, _context->data, _context->size); - return UC_ERR_OK; -} -``` - -使用示例同uc_context_alloc() - - - -### uc_context_size - -```c -size_t uc_context_size(uc_engine *uc); -``` - -返回存储cpu上下文所需的大小。可以用来分配一个缓冲区来包含cpu上下文,并直接调用uc_context_save。 - -``` -@uc: uc_open() 返回的句柄 - -@return 存储cpu上下文所需的大小,类型为 size_t. -``` - -源码实现 - -```c -size_t uc_context_size(uc_engine *uc) -{ - return sizeof(uc_context) + uc->cpu_context_size + sizeof(*uc->cpu->jmp_env); -} -``` - -使用示例同uc_context_alloc() - - - diff --git a/docs/README.md b/docs/README.md index f80f57da..47bd29f5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,6 +12,6 @@ Documention of Unicorn engine. http://unicorn-engine.org/docs/beyond_qemu.html -* Micro Uncorn-Engine API Documentation in Chinese +* Uncorn-Engine Documentation - https://github.com/kabeor/Micro-Unicorn-Engine-API-Documentation + https://github.com/kabeor/Unicorn-Engine-Documentation diff --git a/docs/Unicorn_Engine_Documentation b/docs/Unicorn_Engine_Documentation new file mode 160000 index 00000000..e1111e1b --- /dev/null +++ b/docs/Unicorn_Engine_Documentation @@ -0,0 +1 @@ +Subproject commit e1111e1b8b253bf7292ad911f43c125808a95f1e From fe296d1c9e3d2d6a459bac4b3279038828074443 Mon Sep 17 00:00:00 2001 From: Bet4 <0xbet4@gmail.com> Date: Wed, 13 Oct 2021 11:51:27 +0800 Subject: [PATCH 02/16] Improve Java bindings --- .gitignore | 1 + bindings/java/Makefile.build | 17 ++--- .../java/samples/SampleNetworkAuditing.java | 12 ++-- bindings/java/samples/Sample_arm.java | 8 +-- bindings/java/samples/Sample_arm64.java | 6 +- bindings/java/samples/Sample_m68k.java | 40 ++++++------ bindings/java/samples/Sample_mips.java | 4 +- bindings/java/samples/Sample_sparc.java | 6 +- bindings/java/samples/Sample_x86.java | 62 +++++++++---------- bindings/java/samples/Sample_x86_mmr.java | 2 +- bindings/java/samples/Shellcode.java | 4 +- bindings/java/unicorn/Unicorn.java | 2 +- 12 files changed, 83 insertions(+), 81 deletions(-) diff --git a/.gitignore b/.gitignore index 9ecf5c78..9c529c95 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,7 @@ _*.txt _*.diff tmp/ +bindings/java/unicorn_Unicorn.h bindings/python/build/ bindings/python/dist/ bindings/python/src/ diff --git a/bindings/java/Makefile.build b/bindings/java/Makefile.build index c63fef3a..62b2b76e 100644 --- a/bindings/java/Makefile.build +++ b/bindings/java/Makefile.build @@ -1,9 +1,11 @@ .PHONY: gen_const clean -JAVA_HOME := $(shell jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));') +JC=javac -JAVA_INC := $(shell realpath $(JAVA_HOME)/../include) +JAVA_HOME := $(shell readlink -f `which $(JC)` | sed "s:/bin/$(JC)::") + +JAVA_INC := $(shell realpath $(JAVA_HOME)/include) JAVA_PLATFORM_INC := $(shell dirname `find $(JAVA_INC) -name jni_md.h`) @@ -28,7 +30,6 @@ LIBS=-lunicorn LIBDIR=-L../../ INCS=-I$(JAVA_INC) -I$(JAVA_PLATFORM_INC) -I$(UNICORN_INC) -JC=javac CLASSPATH=./ .SUFFIXES: .java .class @@ -46,7 +47,7 @@ all: lib jar samples $(CC) -c $(CFLAGS) $(INCS) $< -o $@ unicorn_Unicorn.h: unicorn/Unicorn.java - javah unicorn.Unicorn + javac -h . $< unicorn_Unicorn.o: unicorn_Unicorn.c unicorn_Unicorn.h $(CC) -c $(CFLAGS) $(INCS) $< -o $@ @@ -63,12 +64,12 @@ jar: jarfiles jar cf $(JARFILE) unicorn/*.class install: lib jar - cp libunicorn_java$(LIB_EXT) $(JAVA_HOME)/lib/ext - cp $(JARFILE) $(JAVA_HOME)/lib/ext + cp libunicorn_java$(LIB_EXT) /usr/lib + cp $(JARFILE) /usr/share/java uninstall: - rm $(JAVA_HOME)/lib/ext/libunicorn_java$(LIB_EXT) - rm $(JAVA_HOME)/lib/ext/$(JARFILE) + rm /usr/lib/libunicorn_java$(LIB_EXT) + rm /usr/share/java/$(JARFILE) gen_const: cd .. && python const_generator.py java diff --git a/bindings/java/samples/SampleNetworkAuditing.java b/bindings/java/samples/SampleNetworkAuditing.java index 929ceb9c..7a822acb 100644 --- a/bindings/java/samples/SampleNetworkAuditing.java +++ b/bindings/java/samples/SampleNetworkAuditing.java @@ -30,12 +30,12 @@ import java.util.*; public class SampleNetworkAuditing { - public static int next_id = 3; + public static long next_id = 3; public static final int SIZE_REG = 4; private static LogChain fd_chains = new LogChain(); - public static int get_id() { + public static long get_id() { return next_id++; } @@ -112,7 +112,7 @@ public class SampleNetworkAuditing { long mode = edx; String filename = read_string(uc, filename_addr); - Long dummy_fd = new Long(get_id()); + Long dummy_fd = get_id(); uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd); String msg = String.format("open file (filename=%s flags=%d mode=%d) with fd(%d)", filename, flags, mode, dummy_fd); @@ -144,8 +144,8 @@ public class SampleNetworkAuditing { long sock_type = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG)); long protocol = toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG)); - Long dummy_fd = new Long(get_id()); - uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd.intValue()); + Long dummy_fd = get_id(); + uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd); if (family == 2) { // AF_INET String msg = String.format("create socket (%s, %s) with fd(%d)", ADDR_FAMILY.get(family), SOCKET_TYPES.get(sock_type), dummy_fd); @@ -401,7 +401,7 @@ public class SampleNetworkAuditing { mu.mem_write(ADDRESS, code); // initialize stack - mu.reg_write(Unicorn.UC_X86_REG_ESP, new Long(ADDRESS + 0x200000)); + mu.reg_write(Unicorn.UC_X86_REG_ESP, ADDRESS + 0x200000L); // handle interrupt ourself mu.hook_add(new MyInterruptHook(), null); diff --git a/bindings/java/samples/Sample_arm.java b/bindings/java/samples/Sample_arm.java index a4bd1952..4d85fb7d 100644 --- a/bindings/java/samples/Sample_arm.java +++ b/bindings/java/samples/Sample_arm.java @@ -40,9 +40,9 @@ public class Sample_arm { static void test_arm() { - Long r0 = new Long(0x1234); // R0 register - Long r2 = new Long(0x6789); // R1 register - Long r3 = new Long(0x3333); // R2 register + Long r0 = 0x1234L; // R0 register + Long r2 = 0x6789L; // R1 register + Long r3 = 0x3333L; // R2 register Long r1; // R1 register System.out.print("Emulate ARM code\n"); @@ -85,7 +85,7 @@ public class Sample_arm { static void test_thumb() { - Long sp = new Long(0x1234); // R0 register + Long sp = 0x1234L; // R0 register System.out.print("Emulate THUMB code\n"); diff --git a/bindings/java/samples/Sample_arm64.java b/bindings/java/samples/Sample_arm64.java index 56a7212f..0f7e5f32 100644 --- a/bindings/java/samples/Sample_arm64.java +++ b/bindings/java/samples/Sample_arm64.java @@ -69,9 +69,9 @@ public class Sample_arm64 { static void test_arm64() { - Long x11 = new Long(0x1234); // X11 register - Long x13 = new Long(0x6789); // X13 register - Long x15 = new Long(0x3333); // X15 register + Long x11 = 0x1234L; // X11 register + Long x13 = 0x6789L; // X13 register + Long x15 = 0x3333L; // X15 register System.out.print("Emulate ARM64 code\n"); diff --git a/bindings/java/samples/Sample_m68k.java b/bindings/java/samples/Sample_m68k.java index cae025a6..f4658aff 100644 --- a/bindings/java/samples/Sample_m68k.java +++ b/bindings/java/samples/Sample_m68k.java @@ -68,26 +68,26 @@ public class Sample_m68k { static void test_m68k() { - Long d0 = new Long(0x0000); // d0 data register - Long d1 = new Long(0x0000); // d1 data register - Long d2 = new Long(0x0000); // d2 data register - Long d3 = new Long(0x0000); // d3 data register - Long d4 = new Long(0x0000); // d4 data register - Long d5 = new Long(0x0000); // d5 data register - Long d6 = new Long(0x0000); // d6 data register - Long d7 = new Long(0x0000); // d7 data register - - Long a0 = new Long(0x0000); // a0 address register - Long a1 = new Long(0x0000); // a1 address register - Long a2 = new Long(0x0000); // a2 address register - Long a3 = new Long(0x0000); // a3 address register - Long a4 = new Long(0x0000); // a4 address register - Long a5 = new Long(0x0000); // a5 address register - Long a6 = new Long(0x0000); // a6 address register - Long a7 = new Long(0x0000); // a6 address register - - Long pc = new Long(0x0000); // program counter - Long sr = new Long(0x0000); // status register + Long d0 = 0x0000L; // d0 data register + Long d1 = 0x0000L; // d1 data register + Long d2 = 0x0000L; // d2 data register + Long d3 = 0x0000L; // d3 data register + Long d4 = 0x0000L; // d4 data register + Long d5 = 0x0000L; // d5 data register + Long d6 = 0x0000L; // d6 data register + Long d7 = 0x0000L; // d7 data register + + Long a0 = 0x0000L; // a0 address register + Long a1 = 0x0000L; // a1 address register + Long a2 = 0x0000L; // a2 address register + Long a3 = 0x0000L; // a3 address register + Long a4 = 0x0000L; // a4 address register + Long a5 = 0x0000L; // a5 address register + Long a6 = 0x0000L; // a6 address register + Long a7 = 0x0000L; // a6 address register + + Long pc = 0x0000L; // program counter + Long sr = 0x0000L; // status register System.out.print("Emulate M68K code\n"); diff --git a/bindings/java/samples/Sample_mips.java b/bindings/java/samples/Sample_mips.java index d977c231..e338864f 100644 --- a/bindings/java/samples/Sample_mips.java +++ b/bindings/java/samples/Sample_mips.java @@ -70,7 +70,7 @@ public class Sample_mips { static void test_mips_eb() { - Long r1 = new Long(0x6789); // R1 register + Long r1 = 0x6789L; // R1 register System.out.print("Emulate MIPS code (big-endian)\n"); @@ -107,7 +107,7 @@ public class Sample_mips { static void test_mips_el() { - Long r1 = new Long(0x6789); // R1 register + Long r1 = 0x6789L; // R1 register System.out.print("===========================\n"); System.out.print("Emulate MIPS code (little-endian)\n"); diff --git a/bindings/java/samples/Sample_sparc.java b/bindings/java/samples/Sample_sparc.java index 85d26367..b2849f45 100644 --- a/bindings/java/samples/Sample_sparc.java +++ b/bindings/java/samples/Sample_sparc.java @@ -69,9 +69,9 @@ public class Sample_sparc { static void test_sparc() { - Long g1 = new Long(0x1230); // G1 register - Long g2 = new Long(0x6789); // G2 register - Long g3 = new Long(0x5555); // G3 register + Long g1 = 0x1230L; // G1 register + Long g2 = 0x6789L; // G2 register + Long g3 = 0x5555L; // G3 register System.out.print("Emulate SPARC code\n"); diff --git a/bindings/java/samples/Sample_x86.java b/bindings/java/samples/Sample_x86.java index e25df640..652663f8 100644 --- a/bindings/java/samples/Sample_x86.java +++ b/bindings/java/samples/Sample_x86.java @@ -171,8 +171,8 @@ public class Sample_x86 { } static void test_i386() { - Long r_ecx = new Long(0x1234); // ECX register - Long r_edx = new Long(0x7890); // EDX register + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register System.out.print("Emulate i386 code\n"); @@ -234,8 +234,8 @@ public class Sample_x86 { static void test_i386_inout() { - Long r_eax = new Long(0x1234); // ECX register - Long r_ecx = new Long(0x6789); // EDX register + Long r_eax = 0x1234L; // ECX register + Long r_ecx = 0x6789L; // EDX register System.out.print("===================================\n"); System.out.print("Emulate i386 code with IN/OUT instructions\n"); @@ -309,8 +309,8 @@ public class Sample_x86 { // emulate code that loop forever static void test_i386_loop() { - Long r_ecx = new Long(0x1234); // ECX register - Long r_edx = new Long(0x7890); // EDX register + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register System.out.print("===================================\n"); System.out.print("Emulate i386 code that loop forever\n"); @@ -346,8 +346,8 @@ public class Sample_x86 { // emulate code that read invalid memory static void test_i386_invalid_mem_read() { - Long r_ecx = new Long(0x1234); // ECX register - Long r_edx = new Long(0x7890); // EDX register + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register System.out.print("===================================\n"); System.out.print("Emulate i386 code that read from invalid memory\n"); @@ -393,8 +393,8 @@ public class Sample_x86 { // emulate code that read invalid memory static void test_i386_invalid_mem_write() { - Long r_ecx = new Long(0x1234); // ECX register - Long r_edx = new Long(0x7890); // EDX register + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register System.out.print("===================================\n"); System.out.print("Emulate i386 code that write to invalid memory\n"); @@ -453,8 +453,8 @@ public class Sample_x86 { // emulate code that jump to invalid memory static void test_i386_jump_invalid() { - Long r_ecx = new Long(0x1234); // ECX register - Long r_edx = new Long(0x7890); // EDX register + Long r_ecx = 0x1234L; // ECX register + Long r_edx = 0x7890L; // EDX register System.out.print("===================================\n"); System.out.print("Emulate i386 code that jumps to invalid memory\n"); @@ -527,22 +527,22 @@ public class Sample_x86 { u.mem_write(ADDRESS, X86_CODE64); // initialize machine registers - u.reg_write(Unicorn.UC_X86_REG_RSP, new Long(rsp)); - - u.reg_write(Unicorn.UC_X86_REG_RAX, new Long(rax)); - u.reg_write(Unicorn.UC_X86_REG_RBX, new Long(rbx)); - u.reg_write(Unicorn.UC_X86_REG_RCX, new Long(rcx)); - u.reg_write(Unicorn.UC_X86_REG_RDX, new Long(rdx)); - u.reg_write(Unicorn.UC_X86_REG_RSI, new Long(rsi)); - u.reg_write(Unicorn.UC_X86_REG_RDI, new Long(rdi)); - u.reg_write(Unicorn.UC_X86_REG_R8, new Long(r8)); - u.reg_write(Unicorn.UC_X86_REG_R9, new Long(r9)); - u.reg_write(Unicorn.UC_X86_REG_R10, new Long(r10)); - u.reg_write(Unicorn.UC_X86_REG_R11, new Long(r11)); - u.reg_write(Unicorn.UC_X86_REG_R12, new Long(r12)); - u.reg_write(Unicorn.UC_X86_REG_R13, new Long(r13)); - u.reg_write(Unicorn.UC_X86_REG_R14, new Long(r14)); - u.reg_write(Unicorn.UC_X86_REG_R15, new Long(r15)); + u.reg_write(Unicorn.UC_X86_REG_RSP, rsp); + + u.reg_write(Unicorn.UC_X86_REG_RAX, rax); + u.reg_write(Unicorn.UC_X86_REG_RBX, rbx); + u.reg_write(Unicorn.UC_X86_REG_RCX, rcx); + u.reg_write(Unicorn.UC_X86_REG_RDX, rdx); + u.reg_write(Unicorn.UC_X86_REG_RSI, rsi); + u.reg_write(Unicorn.UC_X86_REG_RDI, rdi); + u.reg_write(Unicorn.UC_X86_REG_R8, r8); + u.reg_write(Unicorn.UC_X86_REG_R9, r9); + u.reg_write(Unicorn.UC_X86_REG_R10, r10); + u.reg_write(Unicorn.UC_X86_REG_R11, r11); + u.reg_write(Unicorn.UC_X86_REG_R12, r12); + u.reg_write(Unicorn.UC_X86_REG_R13, r13); + u.reg_write(Unicorn.UC_X86_REG_R14, r14); + u.reg_write(Unicorn.UC_X86_REG_R15, r15); // tracing all basic blocks with customized callback u.hook_add(new MyBlockHook(), 1, 0, null); @@ -598,9 +598,9 @@ public class Sample_x86 { static void test_x86_16() { - Long eax = new Long(7); - Long ebx = new Long(5); - Long esi = new Long(6); + Long eax = 7L; + Long ebx = 5L; + Long esi = 6L; System.out.print("Emulate x86 16-bit code\n"); diff --git a/bindings/java/samples/Sample_x86_mmr.java b/bindings/java/samples/Sample_x86_mmr.java index e2b1a6dd..0ecb3a1e 100644 --- a/bindings/java/samples/Sample_x86_mmr.java +++ b/bindings/java/samples/Sample_x86_mmr.java @@ -49,7 +49,7 @@ public class Sample_x86_mmr { uc.reg_write(Unicorn.UC_X86_REG_LDTR, ldtr1); uc.reg_write(Unicorn.UC_X86_REG_GDTR, gdtr1); - uc.reg_write(Unicorn.UC_X86_REG_EAX, new Long(0xdddddddd)); + uc.reg_write(Unicorn.UC_X86_REG_EAX, 0xddddddddL); // read the registers back out eax = (int)((Long)uc.reg_read(Unicorn.UC_X86_REG_EAX)).longValue(); diff --git a/bindings/java/samples/Shellcode.java b/bindings/java/samples/Shellcode.java index 48674a46..e75d922b 100644 --- a/bindings/java/samples/Shellcode.java +++ b/bindings/java/samples/Shellcode.java @@ -113,7 +113,7 @@ public class Shellcode { static void test_i386() { - Long r_esp = new Long(ADDRESS + 0x200000); // ESP register + Long r_esp = ADDRESS + 0x200000L; // ESP register System.out.print("Emulate i386 code\n"); @@ -158,4 +158,4 @@ public class Shellcode { } -} \ No newline at end of file +} diff --git a/bindings/java/unicorn/Unicorn.java b/bindings/java/unicorn/Unicorn.java index 279fdbbf..26f04dec 100644 --- a/bindings/java/unicorn/Unicorn.java +++ b/bindings/java/unicorn/Unicorn.java @@ -25,7 +25,7 @@ import java.util.*; public class Unicorn implements UnicornConst, ArmConst, Arm64Const, M68kConst, SparcConst, MipsConst, X86Const { - private long eng; + public long eng; private int arch; private int mode; From 5a97bf7f8fe2e07cb488bd56df72ef680d48de93 Mon Sep 17 00:00:00 2001 From: Bet4 <0xbet4@gmail.com> Date: Fri, 15 Oct 2021 09:16:33 +0800 Subject: [PATCH 03/16] Update Rust constants to Unicorn2 --- bindings/rust/src/arm.rs | 30 +- bindings/rust/src/arm64.rs | 1 + bindings/rust/src/lib.rs | 3 +- bindings/rust/src/m68k.rs | 1 + bindings/rust/src/mips.rs | 10 +- bindings/rust/src/riscv.rs | 213 +++++++++++++ bindings/rust/src/sparc.rs | 11 + bindings/rust/src/unicorn_const.rs | 12 +- bindings/rust/src/x86.rs | 486 ++++++++++++++--------------- bindings/rust/tests/unicorn.rs | 24 +- 10 files changed, 505 insertions(+), 286 deletions(-) create mode 100644 bindings/rust/src/riscv.rs diff --git a/bindings/rust/src/arm.rs b/bindings/rust/src/arm.rs index 69178664..6d72cefe 100644 --- a/bindings/rust/src/arm.rs +++ b/bindings/rust/src/arm.rs @@ -123,8 +123,31 @@ pub enum RegisterARM { MSP = 115, PSP = 116, CONTROL = 117, - XPSR = 118, - ENDING = 119, + IAPSR = 118, + EAPSR = 119, + XPSR = 120, + EPSR = 121, + IEPSR = 122, + PRIMASK = 123, + BASEPRI = 124, + BASEPRI_MAX = 125, + FAULTMASK = 126, + APSR_NZCVQ = 127, + APSR_G = 128, + APSR_NZCVQG = 129, + IAPSR_NZCVQ = 130, + IAPSR_G = 131, + IAPSR_NZCVQG = 132, + EAPSR_NZCVQ = 133, + EAPSR_G = 134, + EAPSR_NZCVQG = 135, + XPSR_NZCVQ = 136, + XPSR_G = 137, + XPSR_NZCVQG = 138, + ENDING = 139, +} + +impl RegisterARM { // alias registers // (assoc) R13 = 12, // (assoc) R14 = 10, @@ -133,9 +156,6 @@ pub enum RegisterARM { // (assoc) SL = 76, // (assoc) FP = 77, // (assoc) IP = 78, -} - -impl RegisterARM { pub const R13: RegisterARM = RegisterARM::SP; pub const R14: RegisterARM = RegisterARM::LR; pub const R15: RegisterARM = RegisterARM::PC; diff --git a/bindings/rust/src/arm64.rs b/bindings/rust/src/arm64.rs index 523de02a..299b1bbf 100644 --- a/bindings/rust/src/arm64.rs +++ b/bindings/rust/src/arm64.rs @@ -1,4 +1,5 @@ #![allow(non_camel_case_types)] +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT // ARM64 registers #[repr(C)] diff --git a/bindings/rust/src/lib.rs b/bindings/rust/src/lib.rs index 8fb5ed3c..3ee73b6a 100644 --- a/bindings/rust/src/lib.rs +++ b/bindings/rust/src/lib.rs @@ -35,9 +35,10 @@ mod arm64; mod m68k; mod mips; mod ppc; +mod riscv; mod sparc; mod x86; -pub use crate::{arm::*, arm64::*, m68k::*, mips::*, ppc::*, sparc::*, x86::*}; +pub use crate::{arm::*, arm64::*, m68k::*, mips::*, ppc::*, riscv::*, sparc::*, x86::*}; use ffi::uc_handle; use std::collections::HashMap; diff --git a/bindings/rust/src/m68k.rs b/bindings/rust/src/m68k.rs index 6c04e851..54c62920 100644 --- a/bindings/rust/src/m68k.rs +++ b/bindings/rust/src/m68k.rs @@ -21,4 +21,5 @@ pub enum RegisterM68K { D7, SR, PC, + ENDING, } diff --git a/bindings/rust/src/mips.rs b/bindings/rust/src/mips.rs index 84cec434..5f462af0 100644 --- a/bindings/rust/src/mips.rs +++ b/bindings/rust/src/mips.rs @@ -1,4 +1,5 @@ #![allow(non_camel_case_types)] +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT // MIPS registers #[repr(C)] @@ -155,7 +156,11 @@ pub enum RegisterMIPS { MPL2 = 136, CP0_CONFIG3 = 137, CP0_USERLOCAL = 138, - ENDING = 139, + CP0_STATUS = 139, + ENDING = 140, +} + +impl RegisterMIPS { // alias registers // (assoc) ZERO = 2, // (assoc) AT = 3, @@ -198,9 +203,6 @@ pub enum RegisterMIPS { // (assoc) LO1 = 46, // (assoc) LO2 = 47, // (assoc) LO3 = 48, -} - -impl RegisterMIPS { pub const ZERO: RegisterMIPS = RegisterMIPS::GPR0; pub const AT: RegisterMIPS = RegisterMIPS::GPR1; pub const V0: RegisterMIPS = RegisterMIPS::GPR2; diff --git a/bindings/rust/src/riscv.rs b/bindings/rust/src/riscv.rs new file mode 100644 index 00000000..ca91c350 --- /dev/null +++ b/bindings/rust/src/riscv.rs @@ -0,0 +1,213 @@ +#![allow(non_camel_case_types)] +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + +// RISCV registers +#[repr(C)] +#[derive(PartialEq, Debug, Clone, Copy)] +pub enum RegisterRISCV { + INVALID = 0, + + // General purpose registers + X0 = 1, + X1 = 2, + X2 = 3, + X3 = 4, + X4 = 5, + X5 = 6, + X6 = 7, + X7 = 8, + X8 = 9, + X9 = 10, + X10 = 11, + X11 = 12, + X12 = 13, + X13 = 14, + X14 = 15, + X15 = 16, + X16 = 17, + X17 = 18, + X18 = 19, + X19 = 20, + X20 = 21, + X21 = 22, + X22 = 23, + X23 = 24, + X24 = 25, + X25 = 26, + X26 = 27, + X27 = 28, + X28 = 29, + X29 = 30, + X30 = 31, + X31 = 32, + + // Floating-point registers + F0 = 33, + F1 = 34, + F2 = 35, + F3 = 36, + F4 = 37, + F5 = 38, + F6 = 39, + F7 = 40, + F8 = 41, + F9 = 42, + F10 = 43, + F11 = 44, + F12 = 45, + F13 = 46, + F14 = 47, + F15 = 48, + F16 = 49, + F17 = 50, + F18 = 51, + F19 = 52, + F20 = 53, + F21 = 54, + F22 = 55, + F23 = 56, + F24 = 57, + F25 = 58, + F26 = 59, + F27 = 60, + F28 = 61, + F29 = 62, + F30 = 63, + F31 = 64, + PC = 65, + ENDING = 66, +} + +impl RegisterRISCV { + // Alias registers + // (assoc) ZERO = 1, + // (assoc) RA = 2, + // (assoc) SP = 3, + // (assoc) GP = 4, + // (assoc) TP = 5, + // (assoc) T0 = 6, + // (assoc) T1 = 7, + // (assoc) T2 = 8, + // (assoc) S0 = 9, + // (assoc) FP = 9, + // (assoc) S1 = 10, + // (assoc) A0 = 11, + // (assoc) A1 = 12, + // (assoc) A2 = 13, + // (assoc) A3 = 14, + // (assoc) A4 = 15, + // (assoc) A5 = 16, + // (assoc) A6 = 17, + // (assoc) A7 = 18, + // (assoc) S2 = 19, + // (assoc) S3 = 20, + // (assoc) S4 = 21, + // (assoc) S5 = 22, + // (assoc) S6 = 23, + // (assoc) S7 = 24, + // (assoc) S8 = 25, + // (assoc) S9 = 26, + // (assoc) S10 = 27, + // (assoc) S11 = 28, + // (assoc) T3 = 29, + // (assoc) T4 = 30, + // (assoc) T5 = 31, + // (assoc) T6 = 32, + // (assoc) FT0 = 33, + // (assoc) FT1 = 34, + // (assoc) FT2 = 35, + // (assoc) FT3 = 36, + // (assoc) FT4 = 37, + // (assoc) FT5 = 38, + // (assoc) FT6 = 39, + // (assoc) FT7 = 40, + // (assoc) FS0 = 41, + // (assoc) FS1 = 42, + // (assoc) FA0 = 43, + // (assoc) FA1 = 44, + // (assoc) FA2 = 45, + // (assoc) FA3 = 46, + // (assoc) FA4 = 47, + // (assoc) FA5 = 48, + // (assoc) FA6 = 49, + // (assoc) FA7 = 50, + // (assoc) FS2 = 51, + // (assoc) FS3 = 52, + // (assoc) FS4 = 53, + // (assoc) FS5 = 54, + // (assoc) FS6 = 55, + // (assoc) FS7 = 56, + // (assoc) FS8 = 57, + // (assoc) FS9 = 58, + // (assoc) FS10 = 59, + // (assoc) FS11 = 60, + // (assoc) FT8 = 61, + // (assoc) FT9 = 62, + // (assoc) FT10 = 63, + // (assoc) FT11 = 64, + pub const ZERO: RegisterRISCV = RegisterRISCV::X0; + pub const RA: RegisterRISCV = RegisterRISCV::X1; + pub const SP: RegisterRISCV = RegisterRISCV::X2; + pub const GP: RegisterRISCV = RegisterRISCV::X3; + pub const TP: RegisterRISCV = RegisterRISCV::X4; + pub const T0: RegisterRISCV = RegisterRISCV::X5; + pub const T1: RegisterRISCV = RegisterRISCV::X6; + pub const T2: RegisterRISCV = RegisterRISCV::X7; + pub const S0: RegisterRISCV = RegisterRISCV::X8; + pub const FP: RegisterRISCV = RegisterRISCV::X8; + pub const S1: RegisterRISCV = RegisterRISCV::X9; + pub const A0: RegisterRISCV = RegisterRISCV::X10; + pub const A1: RegisterRISCV = RegisterRISCV::X11; + pub const A2: RegisterRISCV = RegisterRISCV::X12; + pub const A3: RegisterRISCV = RegisterRISCV::X13; + pub const A4: RegisterRISCV = RegisterRISCV::X14; + pub const A5: RegisterRISCV = RegisterRISCV::X15; + pub const A6: RegisterRISCV = RegisterRISCV::X16; + pub const A7: RegisterRISCV = RegisterRISCV::X17; + pub const S2: RegisterRISCV = RegisterRISCV::X18; + pub const S3: RegisterRISCV = RegisterRISCV::X19; + pub const S4: RegisterRISCV = RegisterRISCV::X20; + pub const S5: RegisterRISCV = RegisterRISCV::X21; + pub const S6: RegisterRISCV = RegisterRISCV::X22; + pub const S7: RegisterRISCV = RegisterRISCV::X23; + pub const S8: RegisterRISCV = RegisterRISCV::X24; + pub const S9: RegisterRISCV = RegisterRISCV::X25; + pub const S10: RegisterRISCV = RegisterRISCV::X26; + pub const S11: RegisterRISCV = RegisterRISCV::X27; + pub const T3: RegisterRISCV = RegisterRISCV::X28; + pub const T4: RegisterRISCV = RegisterRISCV::X29; + pub const T5: RegisterRISCV = RegisterRISCV::X30; + pub const T6: RegisterRISCV = RegisterRISCV::X31; + pub const FT0: RegisterRISCV = RegisterRISCV::F0; + pub const FT1: RegisterRISCV = RegisterRISCV::F1; + pub const FT2: RegisterRISCV = RegisterRISCV::F2; + pub const FT3: RegisterRISCV = RegisterRISCV::F3; + pub const FT4: RegisterRISCV = RegisterRISCV::F4; + pub const FT5: RegisterRISCV = RegisterRISCV::F5; + pub const FT6: RegisterRISCV = RegisterRISCV::F6; + pub const FT7: RegisterRISCV = RegisterRISCV::F7; + pub const FS0: RegisterRISCV = RegisterRISCV::F8; + pub const FS1: RegisterRISCV = RegisterRISCV::F9; + pub const FA0: RegisterRISCV = RegisterRISCV::F10; + pub const FA1: RegisterRISCV = RegisterRISCV::F11; + pub const FA2: RegisterRISCV = RegisterRISCV::F12; + pub const FA3: RegisterRISCV = RegisterRISCV::F13; + pub const FA4: RegisterRISCV = RegisterRISCV::F14; + pub const FA5: RegisterRISCV = RegisterRISCV::F15; + pub const FA6: RegisterRISCV = RegisterRISCV::F16; + pub const FA7: RegisterRISCV = RegisterRISCV::F17; + pub const FS2: RegisterRISCV = RegisterRISCV::F18; + pub const FS3: RegisterRISCV = RegisterRISCV::F19; + pub const FS4: RegisterRISCV = RegisterRISCV::F20; + pub const FS5: RegisterRISCV = RegisterRISCV::F21; + pub const FS6: RegisterRISCV = RegisterRISCV::F22; + pub const FS7: RegisterRISCV = RegisterRISCV::F23; + pub const FS8: RegisterRISCV = RegisterRISCV::F24; + pub const FS9: RegisterRISCV = RegisterRISCV::F25; + pub const FS10: RegisterRISCV = RegisterRISCV::F26; + pub const FS11: RegisterRISCV = RegisterRISCV::F27; + pub const FT8: RegisterRISCV = RegisterRISCV::F28; + pub const FT9: RegisterRISCV = RegisterRISCV::F29; + pub const FT10: RegisterRISCV = RegisterRISCV::F30; + pub const FT11: RegisterRISCV = RegisterRISCV::F31; +} diff --git a/bindings/rust/src/sparc.rs b/bindings/rust/src/sparc.rs index 21e09db4..6c6892e6 100644 --- a/bindings/rust/src/sparc.rs +++ b/bindings/rust/src/sparc.rs @@ -1,3 +1,5 @@ +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + // SPARC registers #[repr(C)] #[derive(PartialEq, Debug, Clone, Copy)] @@ -91,4 +93,13 @@ pub enum RegisterSPARC { Y = 86, XCC = 87, PC = 88, + ENDING = 89, +} + +impl RegisterSPARC { + // alias registers + // (assoc) O6 = 84, + // (assoc) I6 = 67, + pub const O6: RegisterSPARC = RegisterSPARC::SP; + pub const I6: RegisterSPARC = RegisterSPARC::FP; } diff --git a/bindings/rust/src/unicorn_const.rs b/bindings/rust/src/unicorn_const.rs index 56b3f275..9cb14da7 100644 --- a/bindings/rust/src/unicorn_const.rs +++ b/bindings/rust/src/unicorn_const.rs @@ -1,11 +1,11 @@ #![allow(non_camel_case_types)] use bitflags::bitflags; -pub const API_MAJOR: u64 = 1; +pub const API_MAJOR: u64 = 2; pub const API_MINOR: u64 = 0; -pub const VERSION_MAJOR: u64 = 1; +pub const VERSION_MAJOR: u64 = 2; pub const VERSION_MINOR: u64 = 0; -pub const VERSION_EXTRA: u64 = 2; +pub const VERSION_EXTRA: u64 = 0; pub const SECOND_SCALE: u64 = 1_000_000; pub const MILISECOND_SCALE: u64 = 1_000; @@ -93,6 +93,7 @@ pub enum Query { MODE = 1, PAGE_SIZE = 2, ARCH = 3, + TIMEOUT = 4, } bitflags! { @@ -124,7 +125,8 @@ pub enum Arch { PPC = 5, SPARC = 6, M68K = 7, - MAX = 8, + RISCV = 8, + MAX = 9, } bitflags! { @@ -154,5 +156,7 @@ bitflags! { const SPARC32 = Self::MIPS32.bits; const SPARC64 = Self::MIPS64.bits; const V9 = Self::THUMB.bits; + const RISCV32 = Self::MIPS32.bits; + const RISCV64 = Self::MIPS64.bits; } } diff --git a/bindings/rust/src/x86.rs b/bindings/rust/src/x86.rs index 03c92176..7ed65230 100644 --- a/bindings/rust/src/x86.rs +++ b/bindings/rust/src/x86.rs @@ -1,257 +1,245 @@ +#![allow(non_camel_case_types)] +// For Unicorn Engine. AUTO-GENERATED FILE, DO NOT EDIT + // X86 registers #[repr(C)] #[derive(PartialEq, Debug, Clone, Copy)] pub enum RegisterX86 { INVALID = 0, - AH, - AL, - AX, - BH, - BL, - BP, - BPL, - BX, - CH, - CL, - CS, - CX, - DH, - DI, - DIL, - DL, - DS, - DX, - EAX, - EBP, - EBX, - ECX, - EDI, - EDX, - EFLAGS, - EIP, - EIZ, - ES, - ESI, - ESP, - FPSW, - FS, - GS, - IP, - RAX, - RBP, - RBX, - RCX, - RDI, - RDX, - RIP, - RIZ, - RSI, - RSP, - SI, - SIL, - SP, - SPL, - SS, - CR0, - CR1, - CR2, - CR3, - CR4, - CR5, - CR6, - CR7, - CR8, - CR9, - CR10, - CR11, - CR12, - CR13, - CR14, - CR15, - DR0, - DR1, - DR2, - DR3, - DR4, - DR5, - DR6, - DR7, - DR8, - DR9, - DR10, - DR11, - DR12, - DR13, - DR14, - DR15, - FP0, - FP1, - FP2, - FP3, - FP4, - FP5, - FP6, - FP7, - K0, - K1, - K2, - K3, - K4, - K5, - K6, - K7, - MM0, - MM1, - MM2, - MM3, - MM4, - MM5, - MM6, - MM7, - R8, - R9, - R10, - R11, - R12, - R13, - R14, - R15, - ST0, - ST1, - ST2, - ST3, - ST4, - ST5, - ST6, - ST7, - XMM0, - XMM1, - XMM2, - XMM3, - XMM4, - XMM5, - XMM6, - XMM7, - XMM8, - XMM9, - XMM10, - XMM11, - XMM12, - XMM13, - XMM14, - XMM15, - XMM16, - XMM17, - XMM18, - XMM19, - XMM20, - XMM21, - XMM22, - XMM23, - XMM24, - XMM25, - XMM26, - XMM27, - XMM28, - XMM29, - XMM30, - XMM31, - YMM0, - YMM1, - YMM2, - YMM3, - YMM4, - YMM5, - YMM6, - YMM7, - YMM8, - YMM9, - YMM10, - YMM11, - YMM12, - YMM13, - YMM14, - YMM15, - YMM16, - YMM17, - YMM18, - YMM19, - YMM20, - YMM21, - YMM22, - YMM23, - YMM24, - YMM25, - YMM26, - YMM27, - YMM28, - YMM29, - YMM30, - YMM31, - ZMM0, - ZMM1, - ZMM2, - ZMM3, - ZMM4, - ZMM5, - ZMM6, - ZMM7, - ZMM8, - ZMM9, - ZMM10, - ZMM11, - ZMM12, - ZMM13, - ZMM14, - ZMM15, - ZMM16, - ZMM17, - ZMM18, - ZMM19, - ZMM20, - ZMM21, - ZMM22, - ZMM23, - ZMM24, - ZMM25, - ZMM26, - ZMM27, - ZMM28, - ZMM29, - ZMM30, - ZMM31, - R8B, - R9B, - R10B, - R11B, - R12B, - R13B, - R14B, - R15B, - R8D, - R9D, - R10D, - R11D, - R12D, - R13D, - R14D, - R15D, - R8W, - R9W, - R10W, - R11W, - R12W, - R13W, - R14W, - R15W, - IDTR, - GDTR, - LDTR, - TR, - FPCW, - FPTAG, - MSR, - MXCSR, + AH = 1, + AL = 2, + AX = 3, + BH = 4, + BL = 5, + BP = 6, + BPL = 7, + BX = 8, + CH = 9, + CL = 10, + CS = 11, + CX = 12, + DH = 13, + DI = 14, + DIL = 15, + DL = 16, + DS = 17, + DX = 18, + EAX = 19, + EBP = 20, + EBX = 21, + ECX = 22, + EDI = 23, + EDX = 24, + EFLAGS = 25, + EIP = 26, + ES = 27, + ESI = 28, + ESP = 29, + FPSW = 30, + FS = 31, + GS = 32, + IP = 33, + RAX = 34, + RBP = 35, + RBX = 36, + RCX = 37, + RDI = 38, + RDX = 39, + RIP = 40, + RSI = 41, + RSP = 42, + SI = 43, + SIL = 44, + SP = 45, + SPL = 46, + SS = 47, + CR0 = 48, + CR1 = 49, + CR2 = 50, + CR3 = 51, + CR4 = 52, + CR8 = 53, + DR0 = 54, + DR1 = 55, + DR2 = 56, + DR3 = 57, + DR4 = 58, + DR5 = 59, + DR6 = 60, + DR7 = 61, + FP0 = 62, + FP1 = 63, + FP2 = 64, + FP3 = 65, + FP4 = 66, + FP5 = 67, + FP6 = 68, + FP7 = 69, + K0 = 70, + K1 = 71, + K2 = 72, + K3 = 73, + K4 = 74, + K5 = 75, + K6 = 76, + K7 = 77, + MM0 = 78, + MM1 = 79, + MM2 = 80, + MM3 = 81, + MM4 = 82, + MM5 = 83, + MM6 = 84, + MM7 = 85, + R8 = 86, + R9 = 87, + R10 = 88, + R11 = 89, + R12 = 90, + R13 = 91, + R14 = 92, + R15 = 93, + ST0 = 94, + ST1 = 95, + ST2 = 96, + ST3 = 97, + ST4 = 98, + ST5 = 99, + ST6 = 100, + ST7 = 101, + XMM0 = 102, + XMM1 = 103, + XMM2 = 104, + XMM3 = 105, + XMM4 = 106, + XMM5 = 107, + XMM6 = 108, + XMM7 = 109, + XMM8 = 110, + XMM9 = 111, + XMM10 = 112, + XMM11 = 113, + XMM12 = 114, + XMM13 = 115, + XMM14 = 116, + XMM15 = 117, + XMM16 = 118, + XMM17 = 119, + XMM18 = 120, + XMM19 = 121, + XMM20 = 122, + XMM21 = 123, + XMM22 = 124, + XMM23 = 125, + XMM24 = 126, + XMM25 = 127, + XMM26 = 128, + XMM27 = 129, + XMM28 = 130, + XMM29 = 131, + XMM30 = 132, + XMM31 = 133, + YMM0 = 134, + YMM1 = 135, + YMM2 = 136, + YMM3 = 137, + YMM4 = 138, + YMM5 = 139, + YMM6 = 140, + YMM7 = 141, + YMM8 = 142, + YMM9 = 143, + YMM10 = 144, + YMM11 = 145, + YMM12 = 146, + YMM13 = 147, + YMM14 = 148, + YMM15 = 149, + YMM16 = 150, + YMM17 = 151, + YMM18 = 152, + YMM19 = 153, + YMM20 = 154, + YMM21 = 155, + YMM22 = 156, + YMM23 = 157, + YMM24 = 158, + YMM25 = 159, + YMM26 = 160, + YMM27 = 161, + YMM28 = 162, + YMM29 = 163, + YMM30 = 164, + YMM31 = 165, + ZMM0 = 166, + ZMM1 = 167, + ZMM2 = 168, + ZMM3 = 169, + ZMM4 = 170, + ZMM5 = 171, + ZMM6 = 172, + ZMM7 = 173, + ZMM8 = 174, + ZMM9 = 175, + ZMM10 = 176, + ZMM11 = 177, + ZMM12 = 178, + ZMM13 = 179, + ZMM14 = 180, + ZMM15 = 181, + ZMM16 = 182, + ZMM17 = 183, + ZMM18 = 184, + ZMM19 = 185, + ZMM20 = 186, + ZMM21 = 187, + ZMM22 = 188, + ZMM23 = 189, + ZMM24 = 190, + ZMM25 = 191, + ZMM26 = 192, + ZMM27 = 193, + ZMM28 = 194, + ZMM29 = 195, + ZMM30 = 196, + ZMM31 = 197, + R8B = 198, + R9B = 199, + R10B = 200, + R11B = 201, + R12B = 202, + R13B = 203, + R14B = 204, + R15B = 205, + R8D = 206, + R9D = 207, + R10D = 208, + R11D = 209, + R12D = 210, + R13D = 211, + R14D = 212, + R15D = 213, + R8W = 214, + R9W = 215, + R10W = 216, + R11W = 217, + R12W = 218, + R13W = 219, + R14W = 220, + R15W = 221, + IDTR = 222, + GDTR = 223, + LDTR = 224, + TR = 225, + FPCW = 226, + FPTAG = 227, + MSR = 228, + MXCSR = 229, + FS_BASE = 230, + GS_BASE = 231, + FLAGS = 232, + RFLAGS = 233, + ENDING = 234, } #[repr(C)] diff --git a/bindings/rust/tests/unicorn.rs b/bindings/rust/tests/unicorn.rs index 90021835..a46cfa89 100644 --- a/bindings/rust/tests/unicorn.rs +++ b/bindings/rust/tests/unicorn.rs @@ -1,11 +1,9 @@ -#![deny(rust_2018_idioms)] - use std::cell::RefCell; use std::rc::Rc; use unicorn::unicorn_const::{uc_error, Arch, HookType, MemType, Mode, Permission, SECOND_SCALE}; use unicorn::{InsnSysX86, RegisterARM, RegisterMIPS, RegisterPPC, RegisterX86}; -pub static X86_REGISTERS: [RegisterX86; 145] = [ +pub static X86_REGISTERS: [RegisterX86; 125] = [ RegisterX86::AH, RegisterX86::AL, RegisterX86::AX, @@ -32,7 +30,6 @@ pub static X86_REGISTERS: [RegisterX86; 145] = [ RegisterX86::EDX, RegisterX86::EFLAGS, RegisterX86::EIP, - RegisterX86::EIZ, RegisterX86::ES, RegisterX86::ESI, RegisterX86::ESP, @@ -47,7 +44,6 @@ pub static X86_REGISTERS: [RegisterX86; 145] = [ RegisterX86::RDI, RegisterX86::RDX, RegisterX86::RIP, - RegisterX86::RIZ, RegisterX86::RSI, RegisterX86::RSP, RegisterX86::SI, @@ -60,17 +56,7 @@ pub static X86_REGISTERS: [RegisterX86; 145] = [ RegisterX86::CR2, RegisterX86::CR3, RegisterX86::CR4, - RegisterX86::CR5, - RegisterX86::CR6, - RegisterX86::CR7, RegisterX86::CR8, - RegisterX86::CR9, - RegisterX86::CR10, - RegisterX86::CR11, - RegisterX86::CR12, - RegisterX86::CR13, - RegisterX86::CR14, - RegisterX86::CR15, RegisterX86::DR0, RegisterX86::DR1, RegisterX86::DR2, @@ -79,14 +65,6 @@ pub static X86_REGISTERS: [RegisterX86; 145] = [ RegisterX86::DR5, RegisterX86::DR6, RegisterX86::DR7, - RegisterX86::DR8, - RegisterX86::DR9, - RegisterX86::DR10, - RegisterX86::DR11, - RegisterX86::DR12, - RegisterX86::DR13, - RegisterX86::DR14, - RegisterX86::DR15, RegisterX86::FP0, RegisterX86::FP1, RegisterX86::FP2, From 9954763c022e4ec76dbf5391b007630a7db82199 Mon Sep 17 00:00:00 2001 From: mio Date: Wed, 6 Oct 2021 23:22:02 +0200 Subject: [PATCH 04/16] Add MSVC 32bit and Android x86_64 CI. --- .github/workflows/PyPI-publishing.yml | 15 ++- .github/workflows/build-uc2.yml | 144 ++++++++++++++++++-------- 2 files changed, 117 insertions(+), 42 deletions(-) diff --git a/.github/workflows/PyPI-publishing.yml b/.github/workflows/PyPI-publishing.yml index 2a3fd208..76751f2b 100644 --- a/.github/workflows/PyPI-publishing.yml +++ b/.github/workflows/PyPI-publishing.yml @@ -1,6 +1,19 @@ name: PyPI 📦 Distribution -on: [push] +on: + push: + paths-ignore: + - ".github/**" + - ".gitignore" + - "docs/**" + - "README" + - "CREDITS.TXT" + - "COPYING_GLIB" + - "COPYING.LGPL2" + - "AUTHORS.TXT" + - "CHANGELOG" + - "COPYING" + pull_request: jobs: build: diff --git a/.github/workflows/build-uc2.yml b/.github/workflows/build-uc2.yml index 46a6de51..8cff3884 100644 --- a/.github/workflows/build-uc2.yml +++ b/.github/workflows/build-uc2.yml @@ -1,19 +1,5 @@ name: Build UC2 -on: - push: - tags-ignore: - - "*" - paths-ignore: - - ".github/**" - - ".gitignore" - - "docs/**" - - "README" - - "CREDITS.TXT" - - "COPYING_GLIB" - - "COPYING.LGPL2" - - "AUTHORS.TXT" - - "CHANGELOG" - - "COPYING" +on: [push, pull_request] env: CI: true @@ -21,7 +7,7 @@ env: jobs: Windows: runs-on: ${{ matrix.config.os }} - name: ${{ matrix.config.name }} - ${{ matrix.compiler }} + name: ${{ matrix.config.name }} strategy: fail-fast: false matrix: @@ -64,15 +50,22 @@ jobs: archiver: '7z a', generators: 'Visual Studio 16 2019' } + - { + os: windows-latest, + arch: x86, + python-arch: x86, + python-ver: '3.8', + name: 'windows-x86 MSVC 32bit', + msvc-arch: x86, + artifact: 'windows_msvc32.7z', + build_type: 'Debug', + archiver: '7z a', + generators: 'Visual Studio 16 2019' + } compiler: [ gcc ] steps: - uses: actions/checkout@v2 - # - name: '🛠️ Python setup' - # uses: actions/setup-python@v2 - # with: - # python-version: ${{ matrix.config.python-ver }} - - name: '🛠️ Win MINGW setup' if: contains(matrix.config.mingw, 'MINGW') uses: msys2/setup-msys2@v2 @@ -86,12 +79,12 @@ jobs: mingw-w64-${{ matrix.config.mingw-arch }}-${{ matrix.compiler }} mingw-w64-${{ matrix.config.mingw-arch }}-toolchain - - name: '🛠️ Win MSVC setup' - if: contains(matrix.config.name, 'MSVC') + - name: '🛠️ Win MSVC 64 setup' + if: contains(matrix.config.name, 'MSVC 64') uses: microsoft/setup-msbuild@v1 - - name: '🚧 Win MSVC build' - if: contains(matrix.config.name, 'MSVC') + - name: '🚧 Win MSVC 64 build' + if: contains(matrix.config.name, 'MSVC 64') shell: bash run: | choco install ninja cmake @@ -109,6 +102,32 @@ jobs: ctest -C ${{ matrix.config.build_type }} mv Debug instdir + - name: '🛠️ Win MSVC 32 setup' + if: contains(matrix.config.name, 'MSVC 32') + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: x86 + + - name: '🚧 Win MSVC 32 build' + if: contains(matrix.config.name, 'MSVC 32') + shell: bash + run: | + choco install ninja cmake + ninja --version + cmake --version + mkdir build + cmake \ + -S . \ + -B . \ + -A "win32" \ + -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \ + -G "${{ matrix.config.generators }}" \ + -DCMAKE_INSTALL_PREFIX:PATH=instdir + cmake --build . --config ${{ matrix.config.build_type }} + cmake --install . --strip --config ${{ matrix.config.build_type }} + ctest -C ${{ matrix.config.build_type }} + mv Debug instdir + - name: '🚧 Win MINGW build' if: contains(matrix.config.mingw, 'MINGW') shell: msys2 {0} @@ -166,6 +185,17 @@ jobs: archiver: '7za a', generators: 'Ninja' } + - { + os: macos-11, + arch: x86_64, + python-arch: x86_64, + python-ver: '3.8', + name: 'android cmake', + artifact: 'Android-x86_64.7z', + build_type: 'Debug', + archiver: '7za a', + generators: 'Ninja' + } compiler: [ gcc ] steps: - uses: actions/checkout@v2 @@ -176,24 +206,56 @@ jobs: # python-version: ${{ matrix.config.python-ver }} - name: '🚧 Mac build' - if: contains(matrix.config.os, 'macos') + if: contains(matrix.config.name, 'macos-x64') shell: bash run: | - brew install p7zip cmake ninja - ninja --version - cmake --version - mkdir build - mkdir instdir - cmake \ - -S . \ - -B . \ - -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \ - -G "${{ matrix.config.generators }}" \ - -DCMAKE_INSTALL_PREFIX:PATH=instdir - cmake --build . --config ${{ matrix.config.build_type }} - cmake --install . --strip - ctest -C ${{ matrix.config.build_type }} + brew install p7zip cmake ninja + ninja --version + cmake --version + mkdir build + mkdir instdir + cmake \ + -S . \ + -B . \ + -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \ + -G "${{ matrix.config.generators }}" \ + -DCMAKE_INSTALL_PREFIX:PATH=instdir + cmake --build . --config ${{ matrix.config.build_type }} + cmake --install . --strip + ctest -C ${{ matrix.config.build_type }} + - name: '🚧 Android x86_64 build' + if: contains(matrix.config.name, 'android') + shell: bash + run: | + brew install p7zip cmake ninja + mkdir build + mkdir instdir + cmake . -DCMAKE_TOOLCHAIN_FILE="$ANDROID_HOME/ndk/21.4.7075529/build/cmake/android.toolchain.cmake" \ + -DANDROID_PLATFORM=android-28 \ + -DANDROID_NDK="$ANDROID_HOME/ndk/21.4.7075529" \ + -DANDROID_ABI=${{ matrix.config.arch }} \ + -DOLP_SDK_ENABLE_TESTING=NO \ + -DOLP_SDK_BUILD_EXAMPLES=ON \ + -S . \ + -B . \ + -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \ + -G "${{ matrix.config.generators }}" \ + -DCMAKE_INSTALL_PREFIX:PATH=instdir + cmake --build . --config ${{ matrix.config.build_type }} + cmake --install . --strip + + - name: '🚧 Android x86_64 tests' + if: contains(matrix.config.name, 'android') + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: 28 + arch: ${{ matrix.config.arch }} + target: default + profile: Nexus 6 + emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -verbose -show-kernel + script: ctest -C ${{ matrix.config.build_type }} + - name: '📦 Pack artifact' shell: bash working-directory: instdir @@ -330,4 +392,4 @@ jobs: uses: actions/upload-artifact@v1 with: path: ./${{ matrix.config.artifact }} - name: ${{ matrix.config.artifact }} \ No newline at end of file + name: ${{ matrix.config.artifact }} From bc5efc9ee553ba8f5ff594ac1ba3fd8f10663700 Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 20:35:23 +0200 Subject: [PATCH 05/16] Fix Android x86_64 build Note: At this time, both arm32 and arm64 emulation doesn't work on either macOS and Ubuntu so we could only have x86_64 --- .github/workflows/build-uc2.yml | 29 ++++++++++++++++++++++-- CMakeLists.txt | 39 ++++++++++++++++++++------------- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build-uc2.yml b/.github/workflows/build-uc2.yml index 8cff3884..8953c7bf 100644 --- a/.github/workflows/build-uc2.yml +++ b/.github/workflows/build-uc2.yml @@ -223,7 +223,7 @@ jobs: cmake --build . --config ${{ matrix.config.build_type }} cmake --install . --strip ctest -C ${{ matrix.config.build_type }} - + - name: '🚧 Android x86_64 build' if: contains(matrix.config.name, 'android') shell: bash @@ -245,16 +245,41 @@ jobs: cmake --build . --config ${{ matrix.config.build_type }} cmake --install . --strip + - name: '🚧 AVD Cache' + if: contains(matrix.config.name, 'android') + uses: actions/cache@v2 + id: avd-cache + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-28 + + - name: '🚧 Create x86_64 tests environment' + if: contains(matrix.config.name, 'android') && steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: 28 + arch: ${{ matrix.config.arch }} + force-avd-creation: false + disable-animations: false + target: default + profile: Nexus 6 + emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -verbose -show-kernel + script: echo "Generated AVD snapshot for caching." + - name: '🚧 Android x86_64 tests' if: contains(matrix.config.name, 'android') uses: reactivecircus/android-emulator-runner@v2 with: api-level: 28 + force-avd-creation: false + disable-animations: true arch: ${{ matrix.config.arch }} target: default profile: Nexus 6 emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -verbose -show-kernel - script: ctest -C ${{ matrix.config.build_type }} + script: bash ./adb.sh - name: '📦 Pack artifact' shell: bash diff --git a/CMakeLists.txt b/CMakeLists.txt index b561cf5c..e8f23054 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,6 +90,7 @@ else() endif() elseif(ANDROID_ABI) string(FIND "${ANDROID_ABI}" "arm64" UC_RET) + file(WRITE ${CMAKE_BINARY_DIR}/adb.sh "#!/bin/bash\n\nadb shell mkdir -p /data/local/tmp/build\n") if (${UC_RET} GREATER_EQUAL "0") set(UNICORN_TARGET_ARCH "aarch64") @@ -1023,6 +1024,9 @@ if (UNICORN_BUILD_SHARED) add_library(unicorn SHARED ${UNICORN_SRCS} ) + if (ANDROID_ABI) + file(APPEND ${CMAKE_BINARY_DIR}/adb.sh "adb push ./libunicorn.so /data/local/tmp/build/\n") + endif() else() add_library(unicorn STATIC ${UNICORN_SRCS} @@ -1159,22 +1163,27 @@ if(UNICORN_FUZZ) endforeach() else() foreach(SAMPLE_FILE ${UNICORN_SAMPLE_FILE}) - add_executable(${SAMPLE_FILE} - ${CMAKE_CURRENT_SOURCE_DIR}/samples/${SAMPLE_FILE}.c - ) - target_link_libraries(${SAMPLE_FILE} - ${SAMPLES_LIB} - ) - endforeach(SAMPLE_FILE) + add_executable(${SAMPLE_FILE} + ${CMAKE_CURRENT_SOURCE_DIR}/samples/${SAMPLE_FILE}.c + ) + target_link_libraries(${SAMPLE_FILE} + ${SAMPLES_LIB} + ) + endforeach(SAMPLE_FILE) - foreach(TEST_FILE ${UNICORN_TEST_FILE}) - add_executable(${TEST_FILE} - ${CMAKE_CURRENT_SOURCE_DIR}/tests/unit/${TEST_FILE}.c - ) - target_link_libraries(${TEST_FILE} - ${SAMPLES_LIB} - ) - add_test(${TEST_FILE} ${TEST_FILE}) + foreach(TEST_FILE ${UNICORN_TEST_FILE}) + add_executable(${TEST_FILE} + ${CMAKE_CURRENT_SOURCE_DIR}/tests/unit/${TEST_FILE}.c + ) + target_link_libraries(${TEST_FILE} + ${SAMPLES_LIB} + ) + add_test(${TEST_FILE} ${TEST_FILE}) + if (ANDROID_ABI) + file(APPEND ${CMAKE_BINARY_DIR}/adb.sh "adb push ${TEST_FILE} /data/local/tmp/build/\n") + file(APPEND ${CMAKE_BINARY_DIR}/adb.sh "adb shell \"chmod +x /data/local/tmp/build/${TEST_FILE}\"\n") + file(APPEND ${CMAKE_BINARY_DIR}/adb.sh "adb shell \'LD_LIBRARY_PATH=/data/local/tmp/build:$LD_LIBRARY_PATH /data/local/tmp/build/${TEST_FILE}\' || exit -1\n") + endif() endforeach(TEST_FILE) endif() From daf16749bc73db107f55f064f4c5b5d1521d6576 Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 20:43:34 +0200 Subject: [PATCH 06/16] Add a comment in adb.sh --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e8f23054..22ad17c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,7 +90,7 @@ else() endif() elseif(ANDROID_ABI) string(FIND "${ANDROID_ABI}" "arm64" UC_RET) - file(WRITE ${CMAKE_BINARY_DIR}/adb.sh "#!/bin/bash\n\nadb shell mkdir -p /data/local/tmp/build\n") + file(WRITE ${CMAKE_BINARY_DIR}/adb.sh "#!/bin/bash\n\n# Auto-generated by CMakeLists.txt\n\nadb shell mkdir -p /data/local/tmp/build\n") if (${UC_RET} GREATER_EQUAL "0") set(UNICORN_TARGET_ARCH "aarch64") From c8eea0bcb336b5b368081352f01fe004fa7a269c Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 21:21:12 +0200 Subject: [PATCH 07/16] Fix build.rs and tests --- bindings/rust/build.rs | 114 ++++++++++++++++++++++++++++----- bindings/rust/tests/unicorn.rs | 14 ++-- 2 files changed, 109 insertions(+), 19 deletions(-) diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs index 7df3e61c..a122faab 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs @@ -1,20 +1,104 @@ +use std::result::Result; use std::{env, process::Command}; -use build_helper::rustc::{link_lib, link_search}; - fn main() { - println!("cargo:rerun-if-changed=unicorn"); let out_dir = env::var("OUT_DIR").unwrap(); - let unicorn = "libunicorn.a"; - let _ = Command::new("cp") - .current_dir("../..") - .arg(&unicorn) - .arg(&out_dir) - .status() - .unwrap(); - link_search( - Some(build_helper::SearchKind::Native), - build_helper::out_dir(), - ); - link_lib(Some(build_helper::LibKind::Static), "unicorn"); + let profile = env::var("PROFILE").unwrap(); + let mut version = String::from("dev"); + if let Result::Ok(version_env) = env::var("UNICORN_VERISON") { + version = version_env; + } + + let unicorn_dir = format!("{}/unicorn_git", out_dir); + + Command::new("rm").arg("-rf").arg(&unicorn_dir); + + Command::new("git") + .arg("clone") + .arg("git@github.com:unicorn-engine/unicorn.git") + .arg("-b") + .arg(version) + .arg(&unicorn_dir) + .output() + .expect("Fail to clone Unicorn repository."); + + println!("cargo:rerun-if-changed={}", &unicorn_dir); + + // We don't use TARGET since we can't cross-build. + if env::consts::OS == "windows" { + // Windows + let mut platform = "x64"; + let mut conf = "Release"; + if std::mem::size_of::() == 4 { + platform = "Win32"; + } + if profile == "debug" { + conf = "Debug"; + } + + Command::new("msbuild") + .current_dir(format!("{}/msvc", &unicorn_dir)) + .arg("unicorn.sln") + .arg("-m") + .arg("-p:Platform".to_owned() + platform) + .arg("-p:Configuration".to_owned() + conf) + .output() + .expect("Fail to build unicorn on Win32."); + println!( + "cargo:rustc-link-lib=static={}/msvc/{}/{}/unicorn.lib", + unicorn_dir, platform, conf + ); + } else { + // Most Unix-like systems + let mut cmd = Command::new("cmake"); + cmd.current_dir(&unicorn_dir) + .arg("-B") + .arg("rust_build") + .arg("-DUNICORN_BUILD_SHARED=off"); + + if profile == "debug" { + cmd.arg("-DCMAKE_BUILD_TYPE=Debug"); + } else { + cmd.arg("-DCMAKE_BUILD_TYPE=Release"); + } + + cmd.output() + .expect("Fail to create build directory on *nix."); + + Command::new("make") + .current_dir(format!("{}/rust_build", &unicorn_dir)) + .arg("-j6") + .output() + .expect("Fail to build unicorn on *nix."); + // This is a workaround for Unicorn static link since libunicorn.a is also linked again lib*-softmmu.a. + // Static libs is just a bundle of objects files. The link relation defined in CMakeLists is only + // valid within the cmake project scope and cmake would help link again sub static libs automatically. + // + // Why do I stick to static link? See: https://github.com/rust-lang/cargo/issues/5077 + println!("cargo:rustc-link-lib=unicorn"); + for arch in [ + "x86_64", + "arm", + "armeb", + "aarch64", + "aarch64eb", + "riscv32", + "riscv64", + "mips", + "mipsel", + "mips64", + "mips64el", + "sparc", + "sparc64", + "m68k", + "ppc", + "ppc64", + ] + .iter() + { + println!("cargo:rustc-link-lib={}-softmmu", arch); + } + println!("cargo:rustc-link-lib=unicorn-common"); + println!("cargo:rustc-link-search={}/rust_build", unicorn_dir); + } } diff --git a/bindings/rust/tests/unicorn.rs b/bindings/rust/tests/unicorn.rs index a46cfa89..81c81ad4 100644 --- a/bindings/rust/tests/unicorn.rs +++ b/bindings/rust/tests/unicorn.rs @@ -256,9 +256,15 @@ fn x86_mem_callback() { let callback_mems = mems_cell.clone(); let callback = - move |_: Unicorn<'_>, mem_type: MemType, address: u64, size: usize, value: i64| { + move |uc: Unicorn<'_>, mem_type: MemType, address: u64, size: usize, value: i64| { let mut mems = callback_mems.borrow_mut(); + let mut uc = uc; + mems.push(MemExpectation(mem_type, address, size, value)); + + if mem_type == MemType::READ_UNMAPPED { + uc.mem_map(address, 0x1000, Permission::ALL).unwrap(); + } }; // mov eax, 0xdeadbeef; @@ -285,7 +291,7 @@ fn x86_mem_callback() { 10 * SECOND_SCALE, 0x1000 ), - Err(uc_error::READ_UNMAPPED) + Ok(()) ); assert_eq!(expects, *mems_cell.borrow()); @@ -479,7 +485,7 @@ fn emulate_mips() { fn emulate_ppc() { let ppc_code32 = vec![0x7F, 0x46, 0x1A, 0x14]; // add 26, 6, 3 - let mut unicorn = unicorn::Unicorn::new(Arch::PPC, Mode::PPC32) + let mut unicorn = unicorn::Unicorn::new(Arch::PPC, Mode::PPC32 | Mode::BIG_ENDIAN) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -631,7 +637,7 @@ fn x86_context_save_and_restore() { fn x86_block_callback() { #[derive(PartialEq, Debug)] struct BlockExpectation(u64, u32); - let expects = vec![BlockExpectation(0x1000, 2), BlockExpectation(0x1000, 2)]; + let expects = vec![BlockExpectation(0x1000, 2)]; let blocks: Vec = Vec::new(); let blocks_cell = Rc::new(RefCell::new(blocks)); From 671f22287f8898528f0d12b1863a5b37080d2675 Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 21:25:07 +0200 Subject: [PATCH 08/16] Add CI for rust --- .github/workflows/Crate-publishing.yml | 80 ++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 .github/workflows/Crate-publishing.yml diff --git a/.github/workflows/Crate-publishing.yml b/.github/workflows/Crate-publishing.yml new file mode 100644 index 00000000..4ee17c92 --- /dev/null +++ b/.github/workflows/Crate-publishing.yml @@ -0,0 +1,80 @@ +name: Crate 📦 Distribution + +on: + push: + paths-ignore: + - ".gitignore" + - "docs/**" + - "README" + - "CREDITS.TXT" + - "COPYING_GLIB" + - "COPYING.LGPL2" + - "AUTHORS.TXT" + - "CHANGELOG" + - "COPYING" + pull_request: + +jobs: + build: + runs-on: ${{ matrix.config.os }} + name: ${{ matrix.config.name }} + strategy: + fail-fast: false + matrix: + config: + - { + os: windows-latest, + arch: x64, + name: 'win_amd64' + } + - { + os: windows-latest, + arch: x32, + name: 'win32' + } + - { + os: ubuntu-latest, + arch: x64, + name: 'sdist' + } + - { + os: macos-latest, + arch: x64, + name: 'macos_x86_64' + } + steps: + - uses: actions/checkout@v2 + + - name: '🛠️ Set up Rust' + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + default: true + componets: rustfmt, clippy + + - name: '🚧 Cargo test' + shell: actions-rs/cargo@v1 + with: + command: test + + # - name: '📤 Upload artifact' + # uses: actions/upload-artifact@v2 + # with: + # path: ${{ github.workspace }}/bindings/python/dist/* + + # publish: + # needs: [build] + # runs-on: ubuntu-latest + # if: startsWith(github.ref, 'refs/tags') + # steps: + # - uses: actions/download-artifact@v2 + # with: + # name: artifact + # path: dist + + # - name: '📦 Publish distribution to PyPI' + # uses: pypa/gh-action-pypi-publish@master + # with: + # user: __token__ + # password: ${{ secrets.pypi_pass }} From 9e447fca1ae8e147c09da679998f496bb1dfc42b Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 21:26:22 +0200 Subject: [PATCH 09/16] Fix syntax --- .github/workflows/Crate-publishing.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Crate-publishing.yml b/.github/workflows/Crate-publishing.yml index 4ee17c92..cc547aad 100644 --- a/.github/workflows/Crate-publishing.yml +++ b/.github/workflows/Crate-publishing.yml @@ -54,7 +54,7 @@ jobs: componets: rustfmt, clippy - name: '🚧 Cargo test' - shell: actions-rs/cargo@v1 + uses: actions-rs/cargo@v1 with: command: test From 304b94cfbb57b4e3203760ffbd32e0f9b324ffff Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 21:33:19 +0200 Subject: [PATCH 10/16] Specify the version --- .github/workflows/Crate-publishing.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/Crate-publishing.yml b/.github/workflows/Crate-publishing.yml index cc547aad..cff47053 100644 --- a/.github/workflows/Crate-publishing.yml +++ b/.github/workflows/Crate-publishing.yml @@ -14,6 +14,9 @@ on: - "COPYING" pull_request: +env: + UNICORN_VERSION: ${{ GITHUB_SHA }} + jobs: build: runs-on: ${{ matrix.config.os }} From b7a530fda5aa6b282df0f5d44119802113543664 Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 21:35:09 +0200 Subject: [PATCH 11/16] Remove wrong tags-ignore --- .github/workflows/build-uc2.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build-uc2.yml b/.github/workflows/build-uc2.yml index e40764b9..61b45053 100644 --- a/.github/workflows/build-uc2.yml +++ b/.github/workflows/build-uc2.yml @@ -2,8 +2,6 @@ name: Build UC2 on: push: - tags-ignore: - - "*" paths-ignore: - ".gitignore" - "docs/**" From 46d3b0539456b9f6789ce7a78b0e6670dedd98df Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 21:37:52 +0200 Subject: [PATCH 12/16] Use github.sha instead --- .github/workflows/Crate-publishing.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Crate-publishing.yml b/.github/workflows/Crate-publishing.yml index cff47053..bbd1d03a 100644 --- a/.github/workflows/Crate-publishing.yml +++ b/.github/workflows/Crate-publishing.yml @@ -15,7 +15,7 @@ on: pull_request: env: - UNICORN_VERSION: ${{ GITHUB_SHA }} + UNICORN_VERSION: ${{ github.sha }} jobs: build: From f7bc48581937f77c63b8853b323db156610dbfd5 Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 21:41:54 +0200 Subject: [PATCH 13/16] Fix wrong directory --- .github/workflows/Crate-publishing.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/Crate-publishing.yml b/.github/workflows/Crate-publishing.yml index bbd1d03a..c3cdfec7 100644 --- a/.github/workflows/Crate-publishing.yml +++ b/.github/workflows/Crate-publishing.yml @@ -28,22 +28,22 @@ jobs: - { os: windows-latest, arch: x64, - name: 'win_amd64' + name: 'Windows x84_64' } - { os: windows-latest, arch: x32, - name: 'win32' + name: 'Windows x86' } - { os: ubuntu-latest, arch: x64, - name: 'sdist' + name: 'Ubuntu x86_64' } - { os: macos-latest, arch: x64, - name: 'macos_x86_64' + name: 'macos x86_64' } steps: - uses: actions/checkout@v2 @@ -57,9 +57,8 @@ jobs: componets: rustfmt, clippy - name: '🚧 Cargo test' - uses: actions-rs/cargo@v1 - with: - command: test + run: | + cd bindings/rust && cargo test # - name: '📤 Upload artifact' # uses: actions/upload-artifact@v2 From 6d0d0897f8123a5c8a1c8d18e09dcb1e619e5f3f Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 21:45:18 +0200 Subject: [PATCH 14/16] Fix Rust build and CI. Add a test for ppc and fix ppc on windows. --- .github/workflows/Crate-publishing.yml | 19 ++++- bindings/rust/build.rs | 114 +++++++++++++++---------- qemu/target/ppc/cpu.h | 7 +- tests/unit/test_ppc.c | 30 ++++++- 4 files changed, 119 insertions(+), 51 deletions(-) diff --git a/.github/workflows/Crate-publishing.yml b/.github/workflows/Crate-publishing.yml index c3cdfec7..fcd5552b 100644 --- a/.github/workflows/Crate-publishing.yml +++ b/.github/workflows/Crate-publishing.yml @@ -15,7 +15,7 @@ on: pull_request: env: - UNICORN_VERSION: ${{ github.sha }} + CI: true jobs: build: @@ -28,7 +28,7 @@ jobs: - { os: windows-latest, arch: x64, - name: 'Windows x84_64' + name: 'Windows x86_64' } - { os: windows-latest, @@ -43,7 +43,7 @@ jobs: - { os: macos-latest, arch: x64, - name: 'macos x86_64' + name: 'macOS x86_64' } steps: - uses: actions/checkout@v2 @@ -54,7 +54,18 @@ jobs: toolchain: stable override: true default: true - componets: rustfmt, clippy + + - name: '🛠️ Add msbuild to PATH' + if: contains(matrix.config.name, 'win') + uses: microsoft/setup-msbuild@v1.0.3 + with: + vs-version: '16.5' + + - name: '🛠️ Win build dependencies' + if: contains(matrix.config.name, 'win') + shell: bash + run: | + choco install ninja cmake - name: '🚧 Cargo test' run: | diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs index a122faab..c128ef14 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs @@ -5,28 +5,50 @@ fn main() { let out_dir = env::var("OUT_DIR").unwrap(); let profile = env::var("PROFILE").unwrap(); let mut version = String::from("dev"); - if let Result::Ok(version_env) = env::var("UNICORN_VERISON") { + if let Result::Ok(version_env) = env::var("UNICORN_BRANCH") { version = version_env; } - let unicorn_dir = format!("{}/unicorn_git", out_dir); + let unicorn_dir; + if let Result::Ok(_) = env::var("CI") { + unicorn_dir = format!("../.."); + } else { + unicorn_dir = format!("{}/unicorn_git", out_dir); - Command::new("rm").arg("-rf").arg(&unicorn_dir); + Command::new("rm").arg("-rf").arg(&unicorn_dir); - Command::new("git") - .arg("clone") - .arg("git@github.com:unicorn-engine/unicorn.git") - .arg("-b") - .arg(version) - .arg(&unicorn_dir) - .output() - .expect("Fail to clone Unicorn repository."); + Command::new("git") + .arg("clone") + .arg("git@github.com:unicorn-engine/unicorn.git") + .arg("-b") + .arg(version) + .arg(&unicorn_dir) + .output() + .expect("Fail to clone Unicorn repository."); + } println!("cargo:rerun-if-changed={}", &unicorn_dir); // We don't use TARGET since we can't cross-build. if env::consts::OS == "windows" { // Windows + let mut cmd = Command::new("cmake"); + cmd.current_dir(&unicorn_dir) + .arg("-B") + .arg("rust_build") + .arg("-DUNICORN_BUILD_SHARED=off") + .arg("-G") + .arg("Visual Studio 16 2019"); + + if profile == "debug" { + cmd.arg("-DCMAKE_BUILD_TYPE=Debug"); + } else { + cmd.arg("-DCMAKE_BUILD_TYPE=Release"); + } + + cmd.output() + .expect("Fail to create build directory on Windows."); + let mut platform = "x64"; let mut conf = "Release"; if std::mem::size_of::() == 4 { @@ -37,16 +59,16 @@ fn main() { } Command::new("msbuild") - .current_dir(format!("{}/msvc", &unicorn_dir)) + .current_dir(format!("{}/rust_build", &unicorn_dir)) .arg("unicorn.sln") .arg("-m") - .arg("-p:Platform".to_owned() + platform) - .arg("-p:Configuration".to_owned() + conf) + .arg("-p:Platform=".to_owned() + platform) + .arg("-p:Configuration=".to_owned() + conf) .output() .expect("Fail to build unicorn on Win32."); println!( - "cargo:rustc-link-lib=static={}/msvc/{}/{}/unicorn.lib", - unicorn_dir, platform, conf + "cargo:rustc-link-search={}/rust_build/{}", + unicorn_dir, conf ); } else { // Most Unix-like systems @@ -70,35 +92,37 @@ fn main() { .arg("-j6") .output() .expect("Fail to build unicorn on *nix."); - // This is a workaround for Unicorn static link since libunicorn.a is also linked again lib*-softmmu.a. - // Static libs is just a bundle of objects files. The link relation defined in CMakeLists is only - // valid within the cmake project scope and cmake would help link again sub static libs automatically. - // - // Why do I stick to static link? See: https://github.com/rust-lang/cargo/issues/5077 - println!("cargo:rustc-link-lib=unicorn"); - for arch in [ - "x86_64", - "arm", - "armeb", - "aarch64", - "aarch64eb", - "riscv32", - "riscv64", - "mips", - "mipsel", - "mips64", - "mips64el", - "sparc", - "sparc64", - "m68k", - "ppc", - "ppc64", - ] - .iter() - { - println!("cargo:rustc-link-lib={}-softmmu", arch); - } - println!("cargo:rustc-link-lib=unicorn-common"); + println!("cargo:rustc-link-search={}/rust_build", unicorn_dir); } + + // This is a workaround for Unicorn static link since libunicorn.a is also linked again lib*-softmmu.a. + // Static libs is just a bundle of objects files. The link relation defined in CMakeLists is only + // valid within the cmake project scope and cmake would help link again sub static libs automatically. + // + // Lazymio(@wtdcode): Why do I stick to static link? See: https://github.com/rust-lang/cargo/issues/5077 + println!("cargo:rustc-link-lib=unicorn"); + for arch in [ + "x86_64", + "arm", + "armeb", + "aarch64", + "aarch64eb", + "riscv32", + "riscv64", + "mips", + "mipsel", + "mips64", + "mips64el", + "sparc", + "sparc64", + "m68k", + "ppc", + "ppc64", + ] + .iter() + { + println!("cargo:rustc-link-lib={}-softmmu", arch); + } + println!("cargo:rustc-link-lib=unicorn-common"); } diff --git a/qemu/target/ppc/cpu.h b/qemu/target/ppc/cpu.h index 0357a4ca..26ed1680 100644 --- a/qemu/target/ppc/cpu.h +++ b/qemu/target/ppc/cpu.h @@ -2018,9 +2018,13 @@ enum { PPC_MEM_TLBIA = 0x0000000010000000ULL, PPC_MEM_TLBIE = 0x0000000020000000ULL, PPC_MEM_TLBSYNC = 0x0000000040000000ULL, + +// The enum in msvc is 32bit **signed**. +// https://godbolt.org/z/nYbvWPWET +#ifndef _MSC_VER /* sync instruction */ PPC_MEM_SYNC = 0x0000000080000000ULL, -#ifndef _MSC_VER + /* eieio instruction */ PPC_MEM_EIEIO = 0x0000000100000000ULL, @@ -2084,6 +2088,7 @@ enum { /* popcntw and popcntd instructions */ PPC_POPCNTWD = 0x8000000000000000ULL, #else +#define PPC_MEM_SYNC 0x0000000080000000ULL #define PPC_MEM_EIEIO 0x0000000100000000ULL #define PPC_CACHE 0x0000000200000000ULL #define PPC_CACHE_ICBI 0x0000000400000000ULL diff --git a/tests/unit/test_ppc.c b/tests/unit/test_ppc.c index 972d24c6..c457bd70 100644 --- a/tests/unit/test_ppc.c +++ b/tests/unit/test_ppc.c @@ -3,6 +3,34 @@ const uint64_t code_start = 0x1000; const uint64_t code_len = 0x4000; +static void uc_common_setup(uc_engine** uc, uc_arch arch, uc_mode mode, const char* code, uint64_t size) { + OK(uc_open(arch, mode, uc)); + OK(uc_mem_map(*uc, code_start, code_len, UC_PROT_ALL)); + OK(uc_mem_write(*uc, code_start, code, size)); +} + +static void test_ppc32_add() { + uc_engine* uc; + char code[] = "\x7f\x46\x1a\x14"; // ADD 26, 6, 3 + int reg; + + uc_common_setup(&uc, UC_ARCH_PPC, UC_MODE_32 | UC_MODE_BIG_ENDIAN, code, sizeof(code) - 1); + + reg = 42; + OK(uc_reg_write(uc, UC_PPC_REG_3, ®)); + reg = 1337; + OK(uc_reg_write(uc, UC_PPC_REG_6, ®)); + + OK(uc_emu_start(uc, code_start, code_start + sizeof(code) - 1, 0, 0)); + + OK(uc_reg_read(uc, UC_PPC_REG_26, ®)); + + TEST_CHECK(reg == 1379); + + OK(uc_close(uc)); +} + TEST_LIST = { - { NULL, NULL } + { "test_ppc32_add", test_ppc32_add }, + { NULL, NULL} }; \ No newline at end of file From a11cd9c43f927553685a092bcd73e1ea98c46307 Mon Sep 17 00:00:00 2001 From: mio Date: Sun, 17 Oct 2021 03:26:40 +0200 Subject: [PATCH 15/16] Ready for rust bindings release --- bindings/rust/Cargo.toml | 7 ++++--- bindings/rust/README.md | 20 +++++++++---------- bindings/rust/src/lib.rs | 6 +++--- bindings/rust/tests/unicorn.rs | 36 +++++++++++++++++----------------- 4 files changed, 34 insertions(+), 35 deletions(-) diff --git a/bindings/rust/Cargo.toml b/bindings/rust/Cargo.toml index d609fd03..1e272df9 100644 --- a/bindings/rust/Cargo.toml +++ b/bindings/rust/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "unicorn" -version = "1.0.0" -authors = ["Lukas Seidel"] +name = "unicorn-engine" +version = "2.0.0-rc3" +authors = ["Ziqiao Kong", "Lukas Seidel"] documentation = "" edition = "2018" include = [ @@ -10,6 +10,7 @@ include = [ "/Cargo.toml", "/README.md", "/src/*", + "build.rs" ] license = "GPL-2.0" readme = "README.md" diff --git a/bindings/rust/README.md b/bindings/rust/README.md index 014e1a60..dba1d53c 100644 --- a/bindings/rust/README.md +++ b/bindings/rust/README.md @@ -1,17 +1,17 @@ -# unicorn-rs +# Unicorn-engine Rust bindings for the [Unicorn](http://www.unicorn-engine.org/) emulator with utility functions. -An extended version for fuzzing with AFL++ support can be found in https://github.com/aflplusplus/unicornafl. +Checkout Unicorn2 source code at [dev branch](https://github.com/unicorn-engine/unicorn/tree/dev). ```rust -use unicorn::RegisterARM; -use unicorn::unicorn_const::{Arch, Mode, Permission, SECOND_SCALE}; +use unicorn_engine::RegisterARM; +use unicorn_engine::unicorn_const::{Arch, Mode, Permission, SECOND_SCALE}; fn main() { let arm_code32: Vec = vec![0x17, 0x00, 0x40, 0xe2]; // sub r0, #23 - let mut unicorn = unicorn::Unicorn::new(Arch::ARM, Mode::LITTLE_ENDIAN).expect("failed to initialize Unicorn instance"); + let mut unicorn = unicorn-engine::Unicorn::new(Arch::ARM, Mode::LITTLE_ENDIAN).expect("failed to initialize Unicorn instance"); let mut emu = unicorn.borrow(); emu.mem_map(0x1000, 0x4000, Permission::ALL).expect("failed to map code page"); emu.mem_write(0x1000, &arm_code32).expect("failed to write instructions"); @@ -26,20 +26,18 @@ fn main() { ``` Further sample code can be found in ```tests/unicorn.rs```. -## Installation +## Usage -This project has been tested on Linux, OS X and Windows. - -To use unicorn-rs, simply add it as a dependency to the Cargo.toml of your program. +Add this to your `Cargo.toml`: ``` [dependencies] -unicorn = { path = "/path/to/bindings/rust", version="1.0.0" } +unicorn-engine = "2.0.0-rc3" ``` ## Acknowledgements These bindings are based on Sébastien Duquette's (@ekse) [unicorn-rs](https://github.com/unicorn-rs/unicorn-rs). We picked up the project, as it is no longer maintained. -Thanks to all contributers. +Thanks to all contributors. diff --git a/bindings/rust/src/lib.rs b/bindings/rust/src/lib.rs index 3ee73b6a..99e1531c 100644 --- a/bindings/rust/src/lib.rs +++ b/bindings/rust/src/lib.rs @@ -6,13 +6,13 @@ //! //! ```rust //! -//! use unicorn::RegisterARM; -//! use unicorn::unicorn_const::{Arch, Mode, Permission, SECOND_SCALE}; +//! use unicorn_engine::RegisterARM; +//! use unicorn_engine::unicorn_const::{Arch, Mode, Permission, SECOND_SCALE}; //! //! fn main() { //! let arm_code32: Vec = vec![0x17, 0x00, 0x40, 0xe2]; // sub r0, #23 //! -//! let mut unicorn = unicorn::Unicorn::new(Arch::ARM, Mode::LITTLE_ENDIAN).expect("failed to initialize Unicorn instance"); +//! let mut unicorn = unicorn_engine::Unicorn::new(Arch::ARM, Mode::LITTLE_ENDIAN).expect("failed to initialize Unicorn instance"); //! let mut emu = unicorn.borrow(); //! emu.mem_map(0x1000, 0x4000, Permission::ALL).expect("failed to map code page"); //! emu.mem_write(0x1000, &arm_code32).expect("failed to write instructions"); diff --git a/bindings/rust/tests/unicorn.rs b/bindings/rust/tests/unicorn.rs index 81c81ad4..6f8f2143 100644 --- a/bindings/rust/tests/unicorn.rs +++ b/bindings/rust/tests/unicorn.rs @@ -1,7 +1,7 @@ use std::cell::RefCell; use std::rc::Rc; -use unicorn::unicorn_const::{uc_error, Arch, HookType, MemType, Mode, Permission, SECOND_SCALE}; -use unicorn::{InsnSysX86, RegisterARM, RegisterMIPS, RegisterPPC, RegisterX86}; +use unicorn_engine::unicorn_const::{uc_error, Arch, HookType, MemType, Mode, Permission, SECOND_SCALE}; +use unicorn_engine::{InsnSysX86, RegisterARM, RegisterMIPS, RegisterPPC, RegisterX86}; pub static X86_REGISTERS: [RegisterX86; 125] = [ RegisterX86::AH, @@ -131,13 +131,13 @@ pub static X86_REGISTERS: [RegisterX86; 125] = [ RegisterX86::R15W, ]; -type Unicorn<'a> = unicorn::UnicornHandle<'a>; +type Unicorn<'a> = unicorn_engine::UnicornHandle<'a>; #[test] fn emulate_x86() { let x86_code32: Vec = vec![0x41, 0x4a]; // INC ecx; DEC edx - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.reg_write(RegisterX86::EAX as i32, 123), Ok(())); @@ -188,7 +188,7 @@ fn x86_code_callback() { let x86_code32: Vec = vec![0x41, 0x4a]; // INC ecx; DEC edx - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -219,7 +219,7 @@ fn x86_intr_callback() { let x86_code32: Vec = vec![0xcd, 0x80]; // INT 0x80; - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -274,7 +274,7 @@ fn x86_mem_callback() { 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0xA3, 0x00, 0x20, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x01, 0x00, ]; - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -312,7 +312,7 @@ fn x86_insn_in_callback() { let x86_code32: Vec = vec![0xe5, 0x10]; // IN eax, 0x10; - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -349,7 +349,7 @@ fn x86_insn_out_callback() { let x86_code32: Vec = vec![0xb0, 0x32, 0xe6, 0x46]; // MOV al, 0x32; OUT 0x46, al; - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -391,7 +391,7 @@ fn x86_insn_sys_callback() { 0x48, 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x05, ]; - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_64) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_64) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -418,7 +418,7 @@ fn x86_insn_sys_callback() { fn emulate_arm() { let arm_code32: Vec = vec![0x83, 0xb0]; // sub sp, #0xc - let mut unicorn = unicorn::Unicorn::new(Arch::ARM, Mode::THUMB) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::ARM, Mode::THUMB) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.reg_write(RegisterARM::R1 as i32, 123), Ok(())); @@ -459,7 +459,7 @@ fn emulate_arm() { fn emulate_mips() { let mips_code32 = vec![0x56, 0x34, 0x21, 0x34]; // ori $at, $at, 0x3456; - let mut unicorn = unicorn::Unicorn::new(Arch::MIPS, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::MIPS, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -485,7 +485,7 @@ fn emulate_mips() { fn emulate_ppc() { let ppc_code32 = vec![0x7F, 0x46, 0x1A, 0x14]; // add 26, 6, 3 - let mut unicorn = unicorn::Unicorn::new(Arch::PPC, Mode::PPC32 | Mode::BIG_ENDIAN) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::PPC, Mode::PPC32 | Mode::BIG_ENDIAN) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -510,7 +510,7 @@ fn emulate_ppc() { #[test] fn mem_unmapping() { - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); @@ -523,7 +523,7 @@ fn mem_map_ptr() { let mut mem: [u8; 4000] = [0; 4000]; let x86_code32: Vec = vec![0x41, 0x4a]; // INC ecx; DEC edx - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); @@ -603,7 +603,7 @@ fn x86_context_save_and_restore() { 0x48, 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x05, ]; let mut unicorn = - unicorn::Unicorn::new(Arch::X86, mode).expect("failed to initialize unicorn instance"); + unicorn_engine::Unicorn::new(Arch::X86, mode).expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); assert_eq!(emu.mem_write(0x1000, &x86_code), Ok(())); @@ -620,7 +620,7 @@ fn x86_context_save_and_restore() { /* and create a new emulator, into which we will "restore" that context */ let mut unicorn2 = - unicorn::Unicorn::new(Arch::X86, mode).expect("failed to initialize unicorn instance"); + unicorn_engine::Unicorn::new(Arch::X86, mode).expect("failed to initialize unicorn instance"); let emu2 = unicorn2.borrow(); assert_eq!(emu2.context_restore(&context), Ok(())); for register in X86_REGISTERS.iter() { @@ -649,7 +649,7 @@ fn x86_block_callback() { let x86_code32: Vec = vec![0x41, 0x4a]; // INC ecx; DEC edx - let mut unicorn = unicorn::Unicorn::new(Arch::X86, Mode::MODE_32) + let mut unicorn = unicorn_engine::Unicorn::new(Arch::X86, Mode::MODE_32) .expect("failed to initialize unicorn instance"); let mut emu = unicorn.borrow(); assert_eq!(emu.mem_map(0x1000, 0x4000, Permission::ALL), Ok(())); From 15bcdf7cbcb8ead61ed6a77a4df94fb4505089bd Mon Sep 17 00:00:00 2001 From: mio Date: Sun, 17 Oct 2021 03:36:58 +0200 Subject: [PATCH 16/16] Add documentation link --- bindings/rust/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bindings/rust/Cargo.toml b/bindings/rust/Cargo.toml index 1e272df9..45d10f16 100644 --- a/bindings/rust/Cargo.toml +++ b/bindings/rust/Cargo.toml @@ -2,7 +2,7 @@ name = "unicorn-engine" version = "2.0.0-rc3" authors = ["Ziqiao Kong", "Lukas Seidel"] -documentation = "" +documentation = "https://github.com/unicorn-engine/unicorn/wiki" edition = "2018" include = [ "/.gitmodules",