haav | Дата: Четверг, 02.01.2020, 13:48 | Сообщение # 1 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| Udis86 - это по сути дизассемблерный движок для x86 и x86-64. Оф. сайт библиотеки: http://udis86.sourceforge.net/
Заголовок по шустрому забахал в fbfrog (файл extern.bi):
Код #pragma once
#include once "crt/stdio.bi" #include once "crt.bi"
#inclib "udis86"
extern "C"
#define UD_EXTERN_H #define UD_TYPES_H
type ud_type as long enum UD_NONE UD_R_AL UD_R_CL UD_R_DL UD_R_BL UD_R_AH UD_R_CH UD_R_DH UD_R_BH UD_R_SPL UD_R_BPL UD_R_SIL UD_R_DIL UD_R_R8B UD_R_R9B UD_R_R10B UD_R_R11B UD_R_R12B UD_R_R13B UD_R_R14B UD_R_R15B UD_R_AX UD_R_CX UD_R_DX UD_R_BX UD_R_SP UD_R_BP UD_R_SI UD_R_DI UD_R_R8W UD_R_R9W UD_R_R10W UD_R_R11W UD_R_R12W UD_R_R13W UD_R_R14W UD_R_R15W UD_R_EAX UD_R_ECX UD_R_EDX UD_R_EBX UD_R_ESP UD_R_EBP UD_R_ESI UD_R_EDI UD_R_R8D UD_R_R9D UD_R_R10D UD_R_R11D UD_R_R12D UD_R_R13D UD_R_R14D UD_R_R15D UD_R_RAX UD_R_RCX UD_R_RDX UD_R_RBX UD_R_RSP UD_R_RBP UD_R_RSI UD_R_RDI UD_R_R8 UD_R_R9 UD_R_R10 UD_R_R11 UD_R_R12 UD_R_R13 UD_R_R14 UD_R_R15 UD_R_ES UD_R_CS UD_R_SS UD_R_DS UD_R_FS UD_R_GS UD_R_CR0 UD_R_CR1 UD_R_CR2 UD_R_CR3 UD_R_CR4 UD_R_CR5 UD_R_CR6 UD_R_CR7 UD_R_CR8 UD_R_CR9 UD_R_CR10 UD_R_CR11 UD_R_CR12 UD_R_CR13 UD_R_CR14 UD_R_CR15 UD_R_DR0 UD_R_DR1 UD_R_DR2 UD_R_DR3 UD_R_DR4 UD_R_DR5 UD_R_DR6 UD_R_DR7 UD_R_DR8 UD_R_DR9 UD_R_DR10 UD_R_DR11 UD_R_DR12 UD_R_DR13 UD_R_DR14 UD_R_DR15 UD_R_MM0 UD_R_MM1 UD_R_MM2 UD_R_MM3 UD_R_MM4 UD_R_MM5 UD_R_MM6 UD_R_MM7 UD_R_ST0 UD_R_ST1 UD_R_ST2 UD_R_ST3 UD_R_ST4 UD_R_ST5 UD_R_ST6 UD_R_ST7 UD_R_XMM0 UD_R_XMM1 UD_R_XMM2 UD_R_XMM3 UD_R_XMM4 UD_R_XMM5 UD_R_XMM6 UD_R_XMM7 UD_R_XMM8 UD_R_XMM9 UD_R_XMM10 UD_R_XMM11 UD_R_XMM12 UD_R_XMM13 UD_R_XMM14 UD_R_XMM15 UD_R_RIP UD_OP_REG UD_OP_MEM UD_OP_PTR UD_OP_IMM UD_OP_JIMM UD_OP_CONST end enum
#define UD_ITAB_H
type ud_table_type as long enum UD_TAB__OPC_TABLE UD_TAB__OPC_X87 UD_TAB__OPC_MOD UD_TAB__OPC_VEX_M UD_TAB__OPC_VEX_P UD_TAB__OPC_RM UD_TAB__OPC_VENDOR UD_TAB__OPC_OSIZE UD_TAB__OPC_MODE UD_TAB__OPC_3DNOW UD_TAB__OPC_REG UD_TAB__OPC_ASIZE UD_TAB__OPC_SSE end enum
type ud_mnemonic_code as long enum UD_Iinvalid UD_I3dnow UD_Inone UD_Idb UD_Ipause UD_Iaaa UD_Iaad UD_Iaam UD_Iaas UD_Iadc UD_Iadd UD_Iaddpd UD_Iaddps UD_Iaddsd UD_Iaddss UD_Iand UD_Iandpd UD_Iandps UD_Iandnpd UD_Iandnps UD_Iarpl UD_Imovsxd UD_Ibound UD_Ibsf UD_Ibsr UD_Ibswap UD_Ibt UD_Ibtc UD_Ibtr UD_Ibts UD_Icall UD_Icbw UD_Icwde UD_Icdqe UD_Iclc UD_Icld UD_Iclflush UD_Iclgi UD_Icli UD_Iclts UD_Icmc UD_Icmovo UD_Icmovno UD_Icmovb UD_Icmovae UD_Icmovz UD_Icmovnz UD_Icmovbe UD_Icmova UD_Icmovs UD_Icmovns UD_Icmovp UD_Icmovnp UD_Icmovl UD_Icmovge UD_Icmovle UD_Icmovg UD_Icmp UD_Icmppd UD_Icmpps UD_Icmpsb UD_Icmpsw UD_Icmpsd UD_Icmpsq UD_Icmpss UD_Icmpxchg UD_Icmpxchg8b UD_Icmpxchg16b UD_Icomisd UD_Icomiss UD_Icpuid UD_Icvtdq2pd UD_Icvtdq2ps UD_Icvtpd2dq UD_Icvtpd2pi UD_Icvtpd2ps UD_Icvtpi2ps UD_Icvtpi2pd UD_Icvtps2dq UD_Icvtps2pi UD_Icvtps2pd UD_Icvtsd2si UD_Icvtsd2ss UD_Icvtsi2ss UD_Icvtss2si UD_Icvtss2sd UD_Icvttpd2pi UD_Icvttpd2dq UD_Icvttps2dq UD_Icvttps2pi UD_Icvttsd2si UD_Icvtsi2sd UD_Icvttss2si UD_Icwd UD_Icdq UD_Icqo UD_Idaa UD_Idas UD_Idec UD_Idiv UD_Idivpd UD_Idivps UD_Idivsd UD_Idivss UD_Iemms UD_Ienter UD_If2xm1 UD_Ifabs UD_Ifadd UD_Ifaddp UD_Ifbld UD_Ifbstp UD_Ifchs UD_Ifclex UD_Ifcmovb UD_Ifcmove UD_Ifcmovbe UD_Ifcmovu UD_Ifcmovnb UD_Ifcmovne UD_Ifcmovnbe UD_Ifcmovnu UD_Ifucomi UD_Ifcom UD_Ifcom2 UD_Ifcomp3 UD_Ifcomi UD_Ifucomip UD_Ifcomip UD_Ifcomp UD_Ifcomp5 UD_Ifcompp UD_Ifcos UD_Ifdecstp UD_Ifdiv UD_Ifdivp UD_Ifdivr UD_Ifdivrp UD_Ifemms UD_Iffree UD_Iffreep UD_Ificom UD_Ificomp UD_Ifild UD_Ifincstp UD_Ifninit UD_Ifiadd UD_Ifidivr UD_Ifidiv UD_Ifisub UD_Ifisubr UD_Ifist UD_Ifistp UD_Ifisttp UD_Ifld UD_Ifld1 UD_Ifldl2t UD_Ifldl2e UD_Ifldpi UD_Ifldlg2 UD_Ifldln2 UD_Ifldz UD_Ifldcw UD_Ifldenv UD_Ifmul UD_Ifmulp UD_Ifimul UD_Ifnop UD_Ifpatan UD_Ifprem UD_Ifprem1 UD_Ifptan UD_Ifrndint UD_Ifrstor UD_Ifnsave UD_Ifscale UD_Ifsin UD_Ifsincos UD_Ifsqrt UD_Ifstp UD_Ifstp1 UD_Ifstp8 UD_Ifstp9 UD_Ifst UD_Ifnstcw UD_Ifnstenv UD_Ifnstsw UD_Ifsub UD_Ifsubp UD_Ifsubr UD_Ifsubrp UD_Iftst UD_Ifucom UD_Ifucomp UD_Ifucompp UD_Ifxam UD_Ifxch UD_Ifxch4 UD_Ifxch7 UD_Ifxrstor UD_Ifxsave UD_Ifxtract UD_Ifyl2x UD_Ifyl2xp1 UD_Ihlt UD_Iidiv UD_Iin UD_Iimul UD_Iinc UD_Iinsb UD_Iinsw UD_Iinsd UD_Iint1 UD_Iint3 UD_Iint UD_Iinto UD_Iinvd UD_Iinvept UD_Iinvlpg UD_Iinvlpga UD_Iinvvpid UD_Iiretw UD_Iiretd UD_Iiretq UD_Ijo UD_Ijno UD_Ijb UD_Ijae UD_Ijz UD_Ijnz UD_Ijbe UD_Ija UD_Ijs UD_Ijns UD_Ijp UD_Ijnp UD_Ijl UD_Ijge UD_Ijle UD_Ijg UD_Ijcxz UD_Ijecxz UD_Ijrcxz UD_Ijmp UD_Ilahf UD_Ilar UD_Ilddqu UD_Ildmxcsr UD_Ilds UD_Ilea UD_Iles UD_Ilfs UD_Ilgs UD_Ilidt UD_Ilss UD_Ileave UD_Ilfence UD_Ilgdt UD_Illdt UD_Ilmsw UD_Ilock UD_Ilodsb UD_Ilodsw UD_Ilodsd UD_Ilodsq UD_Iloopne UD_Iloope UD_Iloop UD_Ilsl UD_Iltr UD_Imaskmovq UD_Imaxpd UD_Imaxps UD_Imaxsd UD_Imaxss UD_Imfence UD_Iminpd UD_Iminps UD_Iminsd UD_Iminss UD_Imonitor UD_Imontmul UD_Imov UD_Imovapd UD_Imovaps UD_Imovd UD_Imovhpd UD_Imovhps UD_Imovlhps UD_Imovlpd UD_Imovlps UD_Imovhlps UD_Imovmskpd UD_Imovmskps UD_Imovntdq UD_Imovnti UD_Imovntpd UD_Imovntps UD_Imovntq UD_Imovq UD_Imovsb UD_Imovsw UD_Imovsd UD_Imovsq UD_Imovss UD_Imovsx UD_Imovupd UD_Imovups UD_Imovzx UD_Imul UD_Imulpd UD_Imulps UD_Imulsd UD_Imulss UD_Imwait UD_Ineg UD_Inop UD_Inot UD_Ior UD_Iorpd UD_Iorps UD_Iout UD_Ioutsb UD_Ioutsw UD_Ioutsd UD_Ipacksswb UD_Ipackssdw UD_Ipackuswb UD_Ipaddb UD_Ipaddw UD_Ipaddd UD_Ipaddsb UD_Ipaddsw UD_Ipaddusb UD_Ipaddusw UD_Ipand UD_Ipandn UD_Ipavgb UD_Ipavgw UD_Ipcmpeqb UD_Ipcmpeqw UD_Ipcmpeqd UD_Ipcmpgtb UD_Ipcmpgtw UD_Ipcmpgtd UD_Ipextrb UD_Ipextrd UD_Ipextrq UD_Ipextrw UD_Ipinsrb UD_Ipinsrw UD_Ipinsrd UD_Ipinsrq UD_Ipmaddwd UD_Ipmaxsw UD_Ipmaxub UD_Ipminsw UD_Ipminub UD_Ipmovmskb UD_Ipmulhuw UD_Ipmulhw UD_Ipmullw UD_Ipop UD_Ipopa UD_Ipopad UD_Ipopfw UD_Ipopfd UD_Ipopfq UD_Ipor UD_Iprefetch UD_Iprefetchnta UD_Iprefetcht0 UD_Iprefetcht1 UD_Iprefetcht2 UD_Ipsadbw UD_Ipshufw UD_Ipsllw UD_Ipslld UD_Ipsllq UD_Ipsraw UD_Ipsrad UD_Ipsrlw UD_Ipsrld UD_Ipsrlq UD_Ipsubb UD_Ipsubw UD_Ipsubd UD_Ipsubsb UD_Ipsubsw UD_Ipsubusb UD_Ipsubusw UD_Ipunpckhbw UD_Ipunpckhwd UD_Ipunpckhdq UD_Ipunpcklbw UD_Ipunpcklwd UD_Ipunpckldq UD_Ipi2fw UD_Ipi2fd UD_Ipf2iw UD_Ipf2id UD_Ipfnacc UD_Ipfpnacc UD_Ipfcmpge UD_Ipfmin UD_Ipfrcp UD_Ipfrsqrt UD_Ipfsub UD_Ipfadd UD_Ipfcmpgt UD_Ipfmax UD_Ipfrcpit1 UD_Ipfrsqit1 UD_Ipfsubr UD_Ipfacc UD_Ipfcmpeq UD_Ipfmul UD_Ipfrcpit2 UD_Ipmulhrw UD_Ipswapd UD_Ipavgusb UD_Ipush UD_Ipusha UD_Ipushad UD_Ipushfw UD_Ipushfd UD_Ipushfq UD_Ipxor UD_Ircl UD_Ircr UD_Irol UD_Iror UD_Ircpps UD_Ircpss UD_Irdmsr UD_Irdpmc UD_Irdtsc UD_Irdtscp UD_Irepne UD_Irep UD_Iret UD_Iretf UD_Irsm UD_Irsqrtps UD_Irsqrtss UD_Isahf UD_Isalc UD_Isar UD_Ishl UD_Ishr UD_Isbb UD_Iscasb UD_Iscasw UD_Iscasd UD_Iscasq UD_Iseto UD_Isetno UD_Isetb UD_Isetae UD_Isetz UD_Isetnz UD_Isetbe UD_Iseta UD_Isets UD_Isetns UD_Isetp UD_Isetnp UD_Isetl UD_Isetge UD_Isetle UD_Isetg UD_Isfence UD_Isgdt UD_Ishld UD_Ishrd UD_Ishufpd UD_Ishufps UD_Isidt UD_Isldt UD_Ismsw UD_Isqrtps UD_Isqrtpd UD_Isqrtsd UD_Isqrtss UD_Istc UD_Istd UD_Istgi UD_Isti UD_Iskinit UD_Istmxcsr UD_Istosb UD_Istosw UD_Istosd UD_Istosq UD_Istr UD_Isub UD_Isubpd UD_Isubps UD_Isubsd UD_Isubss UD_Iswapgs UD_Isyscall UD_Isysenter UD_Isysexit UD_Isysret UD_Itest UD_Iucomisd UD_Iucomiss UD_Iud2 UD_Iunpckhpd UD_Iunpckhps UD_Iunpcklps UD_Iunpcklpd UD_Iverr UD_Iverw UD_Ivmcall UD_Ivmclear UD_Ivmxon UD_Ivmptrld UD_Ivmptrst UD_Ivmlaunch UD_Ivmresume UD_Ivmxoff UD_Ivmread UD_Ivmwrite UD_Ivmrun UD_Ivmmcall UD_Ivmload UD_Ivmsave UD_Iwait UD_Iwbinvd UD_Iwrmsr UD_Ixadd UD_Ixchg UD_Ixgetbv UD_Ixlatb UD_Ixor UD_Ixorpd UD_Ixorps UD_Ixcryptecb UD_Ixcryptcbc UD_Ixcryptctr UD_Ixcryptcfb UD_Ixcryptofb UD_Ixrstor UD_Ixsave UD_Ixsetbv UD_Ixsha1 UD_Ixsha256 UD_Ixstore UD_Iaesdec UD_Iaesdeclast UD_Iaesenc UD_Iaesenclast UD_Iaesimc UD_Iaeskeygenassist UD_Ipclmulqdq UD_Igetsec UD_Imovdqa UD_Imaskmovdqu UD_Imovdq2q UD_Imovdqu UD_Imovq2dq UD_Ipaddq UD_Ipsubq UD_Ipmuludq UD_Ipshufhw UD_Ipshuflw UD_Ipshufd UD_Ipslldq UD_Ipsrldq UD_Ipunpckhqdq UD_Ipunpcklqdq UD_Iaddsubpd UD_Iaddsubps UD_Ihaddpd UD_Ihaddps UD_Ihsubpd UD_Ihsubps UD_Imovddup UD_Imovshdup UD_Imovsldup UD_Ipabsb UD_Ipabsw UD_Ipabsd UD_Ipshufb UD_Iphaddw UD_Iphaddd UD_Iphaddsw UD_Ipmaddubsw UD_Iphsubw UD_Iphsubd UD_Iphsubsw UD_Ipsignb UD_Ipsignd UD_Ipsignw UD_Ipmulhrsw UD_Ipalignr UD_Ipblendvb UD_Ipmuldq UD_Ipminsb UD_Ipminsd UD_Ipminuw UD_Ipminud UD_Ipmaxsb UD_Ipmaxsd UD_Ipmaxud UD_Ipmaxuw UD_Ipmulld UD_Iphminposuw UD_Iroundps UD_Iroundpd UD_Iroundss UD_Iroundsd UD_Iblendpd UD_Ipblendw UD_Iblendps UD_Iblendvpd UD_Iblendvps UD_Idpps UD_Idppd UD_Impsadbw UD_Iextractps UD_Iinsertps UD_Imovntdqa UD_Ipackusdw UD_Ipmovsxbw UD_Ipmovsxbd UD_Ipmovsxbq UD_Ipmovsxwd UD_Ipmovsxwq UD_Ipmovsxdq UD_Ipmovzxbw UD_Ipmovzxbd UD_Ipmovzxbq UD_Ipmovzxwd UD_Ipmovzxwq UD_Ipmovzxdq UD_Ipcmpeqq UD_Ipopcnt UD_Iptest UD_Ipcmpestri UD_Ipcmpestrm UD_Ipcmpgtq UD_Ipcmpistri UD_Ipcmpistrm UD_Imovbe UD_Icrc32 UD_MAX_MNEMONIC_CODE end enum
extern ud_mnemonics_str() as const zstring ptr
type ud_lval_ptr seg as ushort off as ulong end type
union ud_lval sbyte as byte ubyte as ubyte sword as short uword as ushort sdword as long udword as ulong sqword as longint uqword as ulongint ptr as ud_lval_ptr end union
type ud_operand as ud_type type size as ubyte base as ud_type index as ud_type scale as ubyte offset as ubyte lval as ud_lval _legacy as ulongint _oprcode as ubyte end type
type ud inp_hook as function(byval as ud ptr) as long inp_file as FILE ptr inp_buf as const ubyte ptr inp_buf_size as uinteger inp_buf_index as uinteger inp_curr as ubyte inp_ctr as uinteger inp_sess(0 to 63) as ubyte inp_end as long translator as sub(byval as ud ptr) insn_offset as ulongint insn_hexcode as zstring * 64 asm_buf as zstring ptr asm_buf_size as uinteger asm_buf_fill as uinteger asm_buf_int as zstring * 128 sym_resolver as function(byval as ud ptr, byval addr as ulongint, byval offset as longint ptr) as const zstring ptr dis_mode as ubyte pc as ulongint vendor as ubyte mnemonic as ud_mnemonic_code operand(0 to 2) as ud_operand error as ubyte pfx_rex as ubyte pfx_seg as ubyte pfx_opr as ubyte pfx_adr as ubyte pfx_lock as ubyte pfx_str as ubyte pfx_rep as ubyte pfx_repe as ubyte pfx_repne as ubyte opr_mode as ubyte adr_mode as ubyte br_far as ubyte br_near as ubyte have_modrm as ubyte modrm as ubyte primary_opcode as ubyte user_opaque_data as any ptr itab_entry as any ptr 'ud_itab_entry le as any ptr 'ud_lookup_table_list_entry end type
type ud_type_t as ud_type type ud_mnemonic_code_t as ud_mnemonic_code type ud_t as ud type ud_operand_t as ud_operand
const UD_EOI = -1 const UD_INP_CACHE_SZ = 32 const UD_VENDOR_AMD = 0 const UD_VENDOR_INTEL = 1 const UD_VENDOR_ANY = 2
declare sub ud_init(byval as ud ptr) declare sub ud_set_mode(byval as ud ptr, byval as ubyte) declare sub ud_set_pc(byval as ud ptr, byval as ulongint) declare sub ud_set_input_hook(byval as ud ptr, byval as function(byval as ud ptr) as long) declare sub ud_set_input_buffer(byval as ud ptr, byval as const ubyte ptr, byval as uinteger) declare sub ud_set_input_file(byval as ud ptr, byval as FILE ptr) declare sub ud_set_vendor(byval as ud ptr, byval as ulong) declare sub ud_set_syntax(byval as ud ptr, byval as sub(byval as ud ptr)) declare sub ud_input_skip(byval as ud ptr, byval as uinteger) declare function ud_input_end(byval as const ud ptr) as long declare function ud_decode(byval as ud ptr) as ulong declare function ud_disassemble(byval as ud ptr) as ulong declare sub ud_translate_intel(byval as ud ptr) declare sub UD_SYN_INTEL alias "ud_translate_intel"(byval as ud ptr) declare sub ud_translate_att(byval as ud ptr) declare sub UD_SYN_ATT alias "ud_translate_att"(byval as ud ptr) declare function ud_insn_asm(byval u as const ud ptr) as const zstring ptr declare function ud_insn_ptr(byval u as const ud ptr) as const ubyte ptr declare function ud_insn_off(byval as const ud ptr) as ulongint declare function ud_insn_hex(byval as ud ptr) as const zstring ptr declare function ud_insn_len(byval u as const ud ptr) as ulong declare function ud_insn_opr(byval u as const ud ptr, byval n as ulong) as const ud_operand ptr declare function ud_opr_is_sreg(byval opr as const ud_operand ptr) as long declare function ud_opr_is_gpr(byval opr as const ud_operand ptr) as long declare function ud_insn_mnemonic(byval u as const ud ptr) as ud_mnemonic_code declare function ud_lookup_mnemonic(byval c as ud_mnemonic_code) as const zstring ptr declare sub ud_set_user_opaque_data(byval as ud ptr, byval as any ptr) declare function ud_get_user_opaque_data(byval as const ud ptr) as any ptr declare function ud_insn_sext_imm(byval as const ud ptr, byval as const ud_operand ptr) as ulongint declare sub ud_set_asm_buffer(byval u as ud ptr, byval buf as zstring ptr, byval size as uinteger) declare sub ud_set_sym_resolver(byval u as ud ptr, byval resolver as function(byval as ud ptr, byval addr as ulongint, byval offset as longint ptr) as const zstring ptr)
end extern
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Четверг, 02.01.2020, 13:49 | Сообщение # 2 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| Пришлось разбивать на два сообщения, юкоз лимитирует длину сообщения.
---------------------------------------------
А это простенький пример:
Код #include ONCE "extern.bi"
dim as Byte bData(...) = {&h55 , &h48 , &h89 , &he5 , &h48 , &h81 , &hec , &h10 , &h12 ,_ &h00 , &h00 , &h89 , &hbd , &h0c , &hee , &hff , &hff , &h48 ,_ &h89 , &hb5 , &h00 , &hee , &hff , &hff , &hc7 , &h85 , &hcc ,_ &hf6 , &hff , &hff , &h00 , &h00 , &h00 , &h00 }
dim as Long iSize = Ubound(bData) +1
dim as ud_t ud_obj
ud_init ( @ud_obj ) 'ud_set_input_file ( @ud_obj , stdin ) ud_set_input_buffer(@ud_obj , @bData(0) , iSize) ud_set_mode ( @ud_obj , 64 ) ud_set_syntax ( @ud_obj , @UD_SYN_INTEL )
while ( ud_disassemble ( @ud_obj )) ? *ud_insn_asm ( @ud_obj ) wend
sleep
А это результат:
Цитата push rbp mov rbp, rsp sub rsp, 0x1210 mov [rbp-0x11f4], edi mov [rbp-0x1200], rsi mov dword [rbp-0x934], 0x0
Бинарники библиотеки выкладывать не буду, там библиотека собирается элементарно.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |