Skip to content
This repository has been archived by the owner on Aug 13, 2024. It is now read-only.

Commit

Permalink
Event doubling fixes, preventing delete and others. Additional fixes.
Browse files Browse the repository at this point in the history
1) Added changes from #58
  • Loading branch information
rigmar committed Jun 15, 2020
1 parent 68a960d commit 379b464
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 17 deletions.
16 changes: 4 additions & 12 deletions idarling/core/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import ida_lines
import ida_nalt
import ida_name
import ida_netnode
import ida_pro
import ida_range
import ida_segment
Expand Down Expand Up @@ -114,26 +115,20 @@ def __init__(self, ea, flags, size, sname):
self.sname = sname

def __call__(self):
ida_bytes.create_data(self.ea, ida_bytes.calc_dflags(self.flags, True), self.size, ida_struct.get_struc_id(self.sname) if self.sname else ida_idaapi.BADADDR)
ida_bytes.create_data(self.ea, ida_bytes.calc_dflags(self.flags, True), self.size, ida_struct.get_struc_id(self.sname) if self.sname else ida_netnode.BADNODE)


class RenamedEvent(Event):
__event__ = "renamed"

def __init__(self, ea, new_name, old_name, local_name):
def __init__(self, ea, new_name, local_name):
super(RenamedEvent, self).__init__()
self.ea = ea
self.old_name = old_name
self.new_name = new_name
self.local_name = local_name

def __call__(self):
flags = ida_name.SN_LOCAL if self.local_name else 0
if self.old_name:
r = ida_struct.get_member_by_fullname(self.old_name) #if name like 'struct.member' the returning list. It's durty, need fix
if type(r) is list:
return
self.ea = r.id
ida_name.set_name(
self.ea, self.new_name, flags | ida_name.SN_NOWARN
)
Expand Down Expand Up @@ -301,11 +296,8 @@ def __call__(self):
if len(py_type) >= 2:
if self.name:
r = ida_struct.get_member_by_fullname(self.name)
if type(r)is list:
assert type(r[0]) is ida_struct.member_t
if r:
self.ea = r[0].id
else:
self.ea = r.id
ida_typeinf.apply_type(
None,
GetTypeString(py_type[0]),
Expand Down
11 changes: 6 additions & 5 deletions idarling/core/hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import ida_idp
import ida_kernwin
import ida_nalt
import ida_netnode
import ida_pro
import ida_segment
import ida_struct
Expand Down Expand Up @@ -527,15 +528,15 @@ def sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag):

def make_data(self, ea, flags, tid, size):
self._plugin.logger.debug("make_data(ea = %x, flags = %x, tid = %x, size = %x)" % (ea, flags, tid, size))
self._send_packet(evt.MakeDataEvent(ea, flags, size, ida_struct.get_struc_name(tid) if tid != ida_idaapi.BADADDR else ''))
self._send_packet(evt.MakeDataEvent(ea, flags, size, ida_struct.get_struc_name(tid) if tid != ida_netnode.BADNODE else ''))
return 0

def renamed(self, ea, new_name, local_name):
old_name = ""
if ida_struct.is_member_id(ea) or ida_struct.get_struc_name(ea) or ida_enum.get_enum_name(ea):
self._plugin.logger.debug("renamed(ea = %x, new_name = %s, local_name = %d)" % (ea, new_name, local_name))
if ida_struct.is_member_id(ea) or ida_struct.get_struc(ea) or ida_enum.get_enum_name(ea):
# old_name = ida_struct.get_struc_name(ea)
return 0 #drop hook for avoid dublicate 'StrucRenamedEvent', 'EnumRenamedEvent' and 'StrucMemberRenamedEvent'
self._send_packet(evt.RenamedEvent(ea, new_name, old_name, local_name))
return 0 #drop hook for avoid duplicate 'StrucRenamedEvent', 'EnumRenamedEvent' and 'StrucMemberRenamedEvent'
self._send_packet(evt.RenamedEvent(ea, new_name, local_name))
return 0

def byte_patched(self, ea, old_value):
Expand Down

0 comments on commit 379b464

Please sign in to comment.