Python idaapi.set_processor_type() Examples
The following are 3
code examples of idaapi.set_processor_type().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
idaapi
, or try the search function
.
Example #1
Source File: evm-loader.py From ida-evm with Apache License 2.0 | 4 votes |
def load_file(li, neflags, format): # Select the PC processor module idaapi.set_processor_type("EVM", SETPROC_ALL|SETPROC_FATAL) # TODO: detect and emulate contract creation code li.seek(0) buf = li.read(li.size()) if not buf: return 0 if buf[0:2] == '0x': print "Detected hex" new_buf = buf[2:].strip().rstrip() buf_set = set() for c in new_buf: buf_set.update(c) hex_set = set(list('0123456789abcdef')) if buf_set <= hex_set: # subset print "Replacing original buffer with hex decoded version" buf = new_buf.decode('hex') # Load all shellcode into different segments start = 0x0 seg = idaapi.segment_t() size = len(buf) end = start + size # Create the segment seg.startEA = start seg.endEA = end seg.bitness = 1 # 32-bit idaapi.add_segm_ex(seg, "evm", "CODE", 0) # TODO: make segments for stack, memory, storage # Copy the bytes idaapi.mem2base(buf, start, end) # check for swarm hash and make it data instead of code swarm_hash_address = buf.find('ebzzr0') if swarm_hash_address != -1: print "Swarm hash detected, making it data" for i in range(swarm_hash_address-1, swarm_hash_address+42): MakeByte(i) ida_bytes.set_cmt(swarm_hash_address-1, "swarm hash", True) # add entry point idaapi.add_entry(start, start, "start", 1) # add comment to beginning of disassembly idaapi.describe(start, True, "EVM bytecode disassembly") # Mark for analysis AutoMark(start, AU_CODE) #setup_enums() return 1
Example #2
Source File: mclf_loader.py From mclf-ida-loader with GNU General Public License v3.0 | 4 votes |
def load_file(f, neflags, format): f.seek(0) magic = f.read(4); version = struct.unpack("<I", f.read(4))[0]; flags = struct.unpack("<I", f.read(4))[0]; memType = struct.unpack("<I", f.read(4))[0]; serviceType = struct.unpack("<I", f.read(4))[0]; numInstances = struct.unpack("<I", f.read(4))[0]; uuid = struct.unpack("<IIII", f.read(16)); driverId = struct.unpack("<I", f.read(4))[0]; numThreads = struct.unpack("<I", f.read(4))[0]; textVA = struct.unpack("<I", f.read(4))[0]; textLen = struct.unpack("<I", f.read(4))[0]; dataVA = struct.unpack("<I", f.read(4))[0]; dataLen = struct.unpack("<I", f.read(4))[0]; bssLen = struct.unpack("<I", f.read(4))[0]; entry = struct.unpack("<I", f.read(4))[0]; f.seek(MCLF_TEXT_INFO_OFFSET) idaapi.set_processor_type("arm", ida_idp.SETPROC_LOADER) # Set VA for .text and add the segment f.file2base(0, textVA, textVA + textLen, True) idaapi.add_segm(0, textVA, textVA + textLen, ".text", "CODE") # Set VA for .data and add the segment f.file2base(textLen, dataVA, dataVA + dataLen, True) idaapi.add_segm(0, dataVA, dataVA + dataLen, ".data", "DATA") # Add BSS segment after .text and .data idaapi.add_segm(0, dataVA + dataLen, dataVA + dataLen + bssLen, ".bss", "BSS") if entry % 4 == 1: #Thumb address is always +1 to set the T bit idaapi.add_entry(entry-1, entry-1, "_entry", 1) split_sreg_range(entry-1, "T", 0x1, ida_segregs.SR_user) else: idaapi.add_entry(entry, entry, "_entry", 1) split_sreg_range(entry, "T", 0x0, ida_segregs.SR_user) ida_bytes.create_data(tlApiLibEntry, FF_DWORD, 4, ida_idaapi.BADADDR) set_name(tlApiLibEntry,"tlApiLibEntry", SN_CHECK) return 1
Example #3
Source File: mclf_loader.py From tee_research with MIT License | 4 votes |
def load_file(f, neflags, format): f.seek(0) magic = f.read(4); version = struct.unpack("<I", f.read(4))[0]; flags = struct.unpack("<I", f.read(4))[0]; memType = struct.unpack("<I", f.read(4))[0]; serviceType = struct.unpack("<I", f.read(4))[0]; numInstances = struct.unpack("<I", f.read(4))[0]; uuid = struct.unpack("<IIII", f.read(16)); driverId = struct.unpack("<I", f.read(4))[0]; numThreads = struct.unpack("<I", f.read(4))[0]; textVA = struct.unpack("<I", f.read(4))[0]; textLen = struct.unpack("<I", f.read(4))[0]; dataVA = struct.unpack("<I", f.read(4))[0]; dataLen = struct.unpack("<I", f.read(4))[0]; bssLen = struct.unpack("<I", f.read(4))[0]; entry = struct.unpack("<I", f.read(4))[0]; f.seek(MCLF_TEXT_INFO_OFFSET) idaapi.set_processor_type("arm", SETPROC_ALL) # Set VA for .text and add the segment f.file2base(0, textVA, textVA + textLen, True) idaapi.add_segm(0, textVA, textVA + textLen, ".text", "CODE") # Set VA for .data and add the segment f.file2base(textLen, dataVA, dataVA + dataLen, True) idaapi.add_segm(0, dataVA, dataVA + dataLen, ".data", "DATA") # Add BSS segment after .text and .data idaapi.add_segm(0, dataVA + dataLen, dataVA + dataLen + bssLen, ".bss", "BSS") if entry % 4 == 1: #Thumb address is always +1 to set the T bit idaapi.add_entry(entry-1, entry-1, "_entry", 1) SetRegEx(entry-1, "T", 0x1, SR_user); else: idaapi.add_entry(entry, entry, "_entry", 1) SetRegEx(entry, "T", 0x0, SR_user); MakeDword(tlApiLibEntry) MakeName(tlApiLibEntry,"tlApiLibEntry"); return 1