udis: use a real structure instead of a char[] to fix buffer overflow on 64-bit
							parent
							
								
									a8cd8e75f8
								
							
						
					
					
						commit
						ea2090f9de
					
				| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
IN: tools.disassembler.udis.tests
 | 
			
		||||
USING: tools.disassembler.udis tools.test alien.c-types system combinators kernel ;
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    { [ os linux? cpu x86.64? and ] [ [ 656 ] [ "ud" heap-size ] unit-test ] }
 | 
			
		||||
    { [ os macosx? cpu x86.32? and ] [ [ 592 ] [ "ud" heap-size ] unit-test ] }
 | 
			
		||||
    { [ os macosx? cpu x86.64? and ] [ [ 656 ] [ "ud" heap-size ] unit-test ] }
 | 
			
		||||
} cond
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +16,57 @@ IN: tools.disassembler.udis
 | 
			
		|||
 | 
			
		||||
LIBRARY: libudis86
 | 
			
		||||
 | 
			
		||||
TYPEDEF: char[592] ud
 | 
			
		||||
C-STRUCT: ud_operand
 | 
			
		||||
    { "int" "type" }
 | 
			
		||||
    { "uint8_t" "size" }
 | 
			
		||||
    { "uint64_t" "lval" }
 | 
			
		||||
    { "int" "base" }
 | 
			
		||||
    { "int" "index" }
 | 
			
		||||
    { "uint8_t" "offset" }
 | 
			
		||||
    { "uint8_t" "scale" } ;
 | 
			
		||||
 | 
			
		||||
C-STRUCT: ud
 | 
			
		||||
    { "void*" "inp_hook" }
 | 
			
		||||
    { "uint8_t" "inp_curr" }
 | 
			
		||||
    { "uint8_t" "inp_fill" }
 | 
			
		||||
    { "FILE*" "inp_file" }
 | 
			
		||||
    { "uint8_t" "inp_ctr" }
 | 
			
		||||
    { "uint8_t*" "inp_buff" }
 | 
			
		||||
    { "uint8_t*" "inp_buff_end" }
 | 
			
		||||
    { "uint8_t" "inp_end" }
 | 
			
		||||
    { "void*" "translator" }
 | 
			
		||||
    { "uint64_t" "insn_offset" }
 | 
			
		||||
    { "char[32]" "insn_hexcode" }
 | 
			
		||||
    { "char[64]" "insn_buffer" }
 | 
			
		||||
    { "uint" "insn_fill" }
 | 
			
		||||
    { "uint8_t" "dis_mode" }
 | 
			
		||||
    { "uint64_t" "pc" }
 | 
			
		||||
    { "uint8_t" "vendor" }
 | 
			
		||||
    { "struct map_entry*" "mapen" }
 | 
			
		||||
    { "int" "mnemonic" }
 | 
			
		||||
    { "ud_operand[3]" "operand" }
 | 
			
		||||
    { "uint8_t" "error" }
 | 
			
		||||
    { "uint8_t" " " "pfx_rex" }
 | 
			
		||||
    { "uint8_t" "pfx_seg" }
 | 
			
		||||
    { "uint8_t" "pfx_opr" }
 | 
			
		||||
    { "uint8_t" "pfx_adr" }
 | 
			
		||||
    { "uint8_t" "pfx_lock" }
 | 
			
		||||
    { "uint8_t" "pfx_rep" }
 | 
			
		||||
    { "uint8_t" "pfx_repe" }
 | 
			
		||||
    { "uint8_t" "pfx_repne" }
 | 
			
		||||
    { "uint8_t" "pfx_insn" }
 | 
			
		||||
    { "uint8_t" "default64" }
 | 
			
		||||
    { "uint8_t" "opr_mode" }
 | 
			
		||||
    { "uint8_t" "adr_mode" }
 | 
			
		||||
    { "uint8_t" "br_far" }
 | 
			
		||||
    { "uint8_t" "br_near" }
 | 
			
		||||
    { "uint8_t" "implicit_addr" }
 | 
			
		||||
    { "uint8_t" "c1" }
 | 
			
		||||
    { "uint8_t" "c2" }
 | 
			
		||||
    { "uint8_t" "c3" }
 | 
			
		||||
    { "uint8_t[256]" "inp_cache" }
 | 
			
		||||
    { "uint8_t[64]" "inp_sess" }
 | 
			
		||||
    { "ud_itab_entry*" "itab_entry" } ;
 | 
			
		||||
 | 
			
		||||
FUNCTION: void ud_translate_intel ( ud* u ) ;
 | 
			
		||||
FUNCTION: void ud_translate_att ( ud* u ) ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue