idapython常用api记录7.0

2023-11-20

2019-02-13 idapython常用api记录

以下代码片段可以在ida的output窗口中测试用,需要引入相关的模块即可。

import idaapi
import idc
import idautils

后续需要使用的程序代码指令


0017C24                 CODE32
LOAD:00017C24
LOAD:00017C24 ; =============== S U B R O U T I N E =======================================
LOAD:00017C24
LOAD:00017C24 ; Attributes: thunk
LOAD:00017C24
LOAD:00017C24 ; int fstat(int fd, struct stat *buf)
LOAD:00017C24 fstat                                   ; CODE XREF: sub_136A44+64↓p
LOAD:00017C24                 ADRL            R12, 0x1C1C2C
LOAD:00017C2C                 LDR             PC, [R12,#(off_1C2B20 - 0x1C1C2C)]! ; __imp_fstat
LOAD:00017C2C ; End of function fstat
LOAD:00017C2C
....

0017C30
LOAD:00017C30 ; =============== S U B R O U T I N E =======================================
LOAD:00017C30
LOAD:00017C30
LOAD:00017C30                 EXPORT start
LOAD:00017C30 start                                   ; DATA XREF: LOAD:00000018↑o
LOAD:00017C30                                         ; LOAD:stru_66C↑o
LOAD:00017C30                 LDR             R0, =(unk_1C3000 - 0x17C3C)
LOAD:00017C34                 ADD             R0, PC, R0 ; unk_1C3000
LOAD:00017C38                 B               __cxa_finalize
LOAD:00017C38 ; End of function start
LOAD:00017C38
LOAD:00017C38 ; ---------------------------------------------------------------------------
LOAD:00017C3C off_17C3C       DCD unk_1C3000 - 0x17C3C
LOAD:00017C3C                                         ; DATA XREF: start↑r


0017C3C                                         ; DATA XREF: start↑r
LOAD:00017C40 ; ---------------------------------------------------------------------------
LOAD:00017C40
LOAD:00017C40 loc_17C40                               ; DATA XREF: LOAD:00017C5C↓o
LOAD:00017C40                                         ; LOAD:off_17C68↓o
LOAD:00017C40                 CMP             R0, #0
LOAD:00017C44                 BXEQ            LR
LOAD:00017C48                 BX              R0
LOAD:00017C4C ; ---------------------------------------------------------------------------
LOAD:00017C4C                 MOV             R1, R0
LOAD:00017C50                 LDR             R2, =(unk_1C3000 - 0x17C60)
LOAD:00017C54                 LDR             R0, =(loc_17C40 - 0x17C64)
LOAD:00017C58                 ADD             R2, PC, R2 ; unk_1C3000
LOAD:00017C5C                 ADD             R0, PC, R0 ; loc_17C40
LOAD:00017C60                 B               __cxa_atexit
LOAD:00017C60 ; ---------------------------------------------------------------------------
LOAD:00017C64 off_17C64       DCD unk_1C3000 - 0x17C60
LOAD:00017C64                                         ; DATA XREF: LOAD:00017C50↑r
LOAD:00017C68 off_17C68       DCD loc_17C40 - 0x17C64 ; DATA XREF: LOAD:00017C54↑r
LOAD:00017C6C                 CODE16
LOAD:00017C6C
LOAD:00017C6C ; =============== S U B R O U T I N E =======================================
LOAD:00017C6C
LOAD:00017C6C ; Attributes: bp-based frame
LOAD:00017C6C
LOAD:00017C6C sub_17C6C                               ; CODE XREF: sub_1BC30+8↓p
LOAD:00017C6C                                         ; LOAD:000303A6↓p ...
LOAD:00017C6C                 PUSH            {R7,LR}
LOAD:00017C6E                 ADD             R7, SP, #0
LOAD:00017C70                 BL              sub_17580
LOAD:00017C74                 POP             {R7,PC}
LOAD:00017C74 ; End of function sub_17C6C
LOAD:00017C74

获取当前光标位置地址

ea=here()
ea=ScreenEA()

遍历当前模块的segment

import idautils
import idc 

def loop_through_segments():
    '''
    遍历出所有的segment
    '''
    # ea=ScreenEA() ##获取当前光标指向的地址
    # print(hex(ea))
    for seg in idautils.Segments():
        print('segName:%s  0x%x-0x%x ' %(idc.SegName(seg),idc.SegStart(seg),idc.SegEnd(seg)))

segmentName:idc.SegName(seg) ##段名称
segmentStart:idc.SegStart(seg) ##段起始位置
segmentEnd:idc.SegEnd(seg) ## 段结束位置

获取段信息的其他api

idc.NextSeg(ea) ##获取当前段的下一个段
idc.SegByName(segname) ##根据名称获取段的地址,实际在测试的时候,调用这个函数只能返回的是segment的个数segment

输出:
Python>idc.SegByName('LOAD') 
2 ##表示有两个LOAD段

获取当前模块的导出所有函数

import idautils
import idc

def loop_module_funcs():
	for func in idautils.Functions(): ##获取所有的导出函数
		'''
		idautils.Functions列举出已知的函数,返回一个list对象,每个item是一个函数的首地址,
		通过idc.GetFunctionName(funcAddr)获取函数名称
		'''
		print(hex(func),idc.GetFunctionName(func))
		
		
idautils.Functions():返回所有的导出函数的函数地址,可以通过for来循环迭代每个函数

idautils.GetFuncntionName(ea):根据当前的函数地址,返回函数名称。
		

获取函数的起始和结束地址

有时候我们在读取一个函数的指令的时候,需要知道函数的起始地址和结束地址,使用idaapi.get_func(faddr)

def get_func_boundaries(ea):
	func=idaapi.get_func(ea)
	start = func.start_ea
	end	  =func.end_ea
	print('start: 0x%x end:0x%x' %(start,end))
	
def loop_module_funcs():
	for func in idautils.Functions():
		'''
		idautils.Functions列举出已知的函数,返回一个list对象,每个item是一个函数的首地址,
		通过idc.GetFunctionName(funcAddr)获取函数名称
		'''
		print(hex(func),idc.GetFunctionName(func))
		get_func_boundaries(func)
loop_module_funcs() 


idaapi.get_func(ea):返回一个func_t对象,其中包含了函数的起始地址和结束地址


使用dir函数查看func_t对象,如下
Python>func = idaapi.get_func(0x17C30)
Python>type(func)
<class 'ida_funcs.func_t'>
Python>dir(func)
['__class__', '__del__', '__delattr__', 
'__dict__', '__doc__', '__eq__', '__format__',
 '__getattribute__', '__gt__', '__hash__', '__init__',
  '__lt__', '__module__', '__ne__', '__new__', '__reduce__', 
  '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
  '__str__', '__subclasshook__', '__swig_destroy__', 
  '__weakref__', '_print', 'analyzed_sp', 'argsize', 
  'clear', 'color', 'compare', 'contains', 'does_return', 
  'empty', 'endEA', 'end_ea', 'extend', 'flags', 'fpd', 
  'frame', 'frregs', 'frsize', 'intersect', 'is_far', 
  'llabelqty', 'llabels', 'overlaps', 'owner', 'pntqty',
   'points', 'referers', 'refqty', 'regargqty', 'regargs',
    'regvarqty', 'regvars', 'size', 'startEA', 'start_ea', 
    'tailqty', 'tails', 'this', 'thisown']


其中的startEA,start_ea 和endEA ,end_ea表示函数的边界值

在ida中执行上述脚本,输出如下:

('0x173c4L', 'strerror')
start: 0x173c4 end:0x173d0
('0x173d0L', 'memcpy')
start: 0x173d0 end:0x173dc
('0x173dcL', 'sub_173DC')
start: 0x173dc end:0x173de
	

列出指定地址范围内的所有函数

有时候可能模块的很多区域的函数我们不需要,只需要指定一定范围内的并列举出该范围内的函数,如果全部列出可能会花费很大时间见,可以使用idautils.Functions(start_addr,end_addr)来读取



def loop_module_funcs(start_addr,end_addr):
	for func in idautils.Functions(start_addr,end_addr):
		print(hex(func),idc.GetFunctionName(func))
		get_func_boundaries(func)

loop_module_funcs(0x17514L,0x17560L)

idc.GetFunctionName(func):获取函数地址处的函数名称

上述脚本表述只列出了0x17514L~0x17560L之间的函数,如下

('0x17514L', '__aeabi_memset4')
start: 0x17514 end:0x17520
('0x17520L', 'j_clock_gettime')
start: 0x17520 end:0x17524
('0x17524L', 'clock_gettime')
start: 0x17524 end:0x17530
('0x17530L', 'sub_17530')
start: 0x17530 end:0x17532
('0x17534L', 'readlink')
start: 0x17534 end:0x17540
('0x17540L', 'j_sscanf')
start: 0x17540 end:0x17544
('0x17544L', 'sscanf')
start: 0x17544 end:0x17550
('0x17550L', 'sub_17550')
start: 0x17550 end:0x17552
('0x17554L', 'free')
start: 0x17554 end:0x17560

其他常用获取模块函数的api

可以对应查看开始处的代码片段

##获取下一个函数
idc.NextFunction(addr)

nfc=idc.NextFunction(0x17C30)
Python>idc.GetFunctionName(nfc)
sub_17C6C

---------------------
获取上一个函数
idc.PrevFunction(addr)

Python>pre = idc.PrevFunction(0x17C30)
Python>idc.GetFunctionName(pre)
fstat

获取函数的指令

  • 读取函数的起始地址和结束地址
  • 读取函数内的指令,包括 汇编指令 操作数

#coding:utf8

import idaapi
import idc
import idautils


def get_func_boundaries(ea):
	func=idaapi.get_func(ea)
	start = func.start_ea
	end	  =func.end_ea
	# print('start: 0x%x end:0x%x' %(start,end))
	return start,end

def get_disassm(addr):

	'''
	这里读取start函数内的指令即可
	'''
	start,end = get_func_boundaries(addr)
	while True: ##
		print('start: 0x%x' %start)
		mnemonic=idc.GetMnem(start)##获取指令的助记符
		op1=idc.GetOpnd(start,0) ###获取指令的操作数1,
		op2 = idc.GetOpnd(start,1) ### 获取指令的操作数2
		# print('mnemonic:%s  op1:%s op2:%s ' %(mnemonic,op1,op2))
		##完整的一条指令 
		print('disasm:')
		disasm = idc.GetDisasm(start) ###获取程序指令
		print(disasm)
		start +=4 ##每次地址递增4个字节
		if start>=end:
			break
		

get_disassm(0x17C30)

输出:

start: 0x17c30
disasm:
LDR             R0, =(unk_1C3000 - 0x17C3C)
start: 0x17c34
disasm:
ADD             R0, PC, R0; unk_1C3000
start: 0x17c38
disasm:
B               __cxa_finalize

以上就将start出的函数所有指令都提取出来

读取函数指令2

在上面的程序中,利用现有的知识点来读取指定函数的指令,当然,ida还提供来另一种方式来读取指定函数地址出的指令,如下

def get_disasm2(addr):
	'''
	读取指令的另一种方式
	'''
	start = idc.GetFunctionAttr(addr,FUNCATTR_START) ## 通过idc.GetFunctionAttr来获取函数的起始地址,起中第二个参数使用FUNCATTR_START表示起始
	end=idc.GetFunctionAttr(addr,FUNCATTR_END) ## 通过idc.GetFunctionAttr来获取函数的起始地址,起中第二个参数使用FUNCATTR_END表示结束
	cur_start=start
	print('start22: 0x%x end:0x%x' %(start,end))
	while cur_start<=end: ###结束条件为当前指令地址大于函数的结束地址
		print('addr2:0x%x'%cur_start)
		disasm = idc.GetDisasm(cur_start)
		print(disasm)
		cur_start=idc.NextHead(cur_start,end) ###读取下一个指令的地址,类似于我们的start+=4
		
运行后,输出结果为:

start22: 0x17c30 end:0x17c3c
addr2:0x17c30
LDR             R0, =(unk_1C3000 - 0x17C3C)
addr2:0x17c34
ADD             R0, PC, R0; unk_1C3000
addr2:0x17c38
B               __cxa_finalize		

读取指令3

使用idautils.FuncItems(addr)来获取函数的所有指令地址,这里比较好的是不用去判断某个指令地址大于函数的结束地址,如下指令


def get_disasm33(addr):

	'''
	使用idc.FuncItems(addr)函数类读取一个函数的指令和边界值,idc.FuncItems(addr)返回一个可迭代对象
	将这个对象转为了list即可。这个list内部是一个顺序的地址值,从函数的起始地址到结束地址开始
	'''
	pass
	disasm_addrs = list(idautils.FuncItems(addr))
	for d  in disasm_addrs:
		print(idc.GetDisasm(d))
		
输出:
LDR             R0, =(unk_1C3000 - 0x17C3C)
ADD             R0, PC, R0; unk_1C3000
B               __cxa_finalize
		

读取指令需要注意的问题

  • 有些地址不存在,需要处理,使用idaapi.BADADDR来做对比
Python>if n != idaapi.BADADDR:print ('valid addr ')
valid addr 
  • 上述两个遍历指令的方式缺点为:
    1、只能读取包括在函数边界边内的,如果存在跳转指令,则有可能导致结束地址小于跳转指令,那么将会导致不能全部读取指令值。
    2、当出现跳转地址大于函数的边界值时,这种在代码混淆中常常存在。

判断指令类型

通常在读取指令的时候,可能需要判断一下指令的操作数类型,是否是寄存器还是常数函数指向内存的指针等

  • idc.GetOpType(addr,index) 表示要获取的操作数类型,index表示第一个还是第二个
  • 常用的类型包括了

o_void     = ida_ua.o_void      # No Operand                           ----------
o_reg      = ida_ua.o_reg       # General Register (al,ax,es,ds...)    reg
o_mem      = ida_ua.o_mem       # Direct Memory Reference  (DATA)      addr
o_phrase   = ida_ua.o_phrase    # Memory Ref [Base Reg + Index Reg]    phrase
o_displ    = ida_ua.o_displ     # Memory Reg [Base Reg + Index Reg + Displacement] phrase+addr
o_imm      = ida_ua.o_imm       # Immediate Value                      value
o_far      = ida_ua.o_far       # Immediate Far Address  (CODE)        addr
o_near     = ida_ua.o_near      # Immediate Near Address (CODE)        addr
o_idpspec0 = ida_ua.o_idpspec0  # Processor specific type
o_idpspec1 = ida_ua.o_idpspec1  # Processor specific type
o_idpspec2 = ida_ua.o_idpspec2  # Processor specific type
o_idpspec3 = ida_ua.o_idpspec3  # Processor specific type
o_idpspec4 = ida_ua.o_idpspec4  # Processor specific type
o_idpspec5 = ida_ua.o_idpspec5  # Processor specific type
                                # There can be more processor specific types

# x86
o_trreg  =       ida_ua.o_idpspec0      # trace register
o_dbreg  =       ida_ua.o_idpspec1      # debug register
o_crreg  =       ida_ua.o_idpspec2      # control register
o_fpreg  =       ida_ua.o_idpspec3      # floating point register
o_mmxreg  =      ida_ua.o_idpspec4      # mmx register
o_xmmreg  =      ida_ua.o_idpspec5      # xmm register

# arm
o_reglist  =     ida_ua.o_idpspec1      # Register list (for LDM/STM)
o_creglist  =    ida_ua.o_idpspec2      # Coprocessor register list (for CDP)
o_creg  =        ida_ua.o_idpspec3      # Coprocessor register (for LDC/STC)
o_fpreglist  =   ida_ua.o_idpspec4      # Floating point register list
o_text  =        ida_ua.o_idpspec5      # Arbitrary text stored in the operand
o_cond  =        (ida_ua.o_idpspec5+1)  # ARM condition as an operand

# ppc
o_spr  =         ida_ua.o_idpspec0      # Special purpose register
o_twofpr  =      ida_ua.o_idpspec1      # Two FPRs
o_shmbme  =      ida_ua.o_idpspec2      # SH & MB & ME
o_crf  =         ida_ua.o_idpspec3      # crfield      x.reg
o_crb  =         ida_ua.o_idpspec4      # crbit        x.reg
o_dcr  =    

如何获取当前指令的上一个指令和下一个指令

有时候我们只有同一个地址值并且能读取到当前地址的指令,为了能获取到当前指令的上一个或者下一个指令,通过idc,PrevHead(addr)和idc.NextHead(addr)来
获取。如下

我们引用的是0x17C34处的地址,实际得到的是指令为

ADD             R0, PC, R0 
上一条指令为:
Python>pre = idc.PrevHead(0x17C34 )
Python>idc.GetDisasm(pre)
LDR             R0, =(unk_1C3000 - 0x17C3C)
------------------------------------------
读取下一条指令为:
Python>nt = idc.NextHead(0x17C34)
Python>idc.GetDisasm(nt)
B               __cxa_finalize


总结

  • 在ida的高版本中,6.95 -7.0以后,有一些api发生了变化。我们使用inspect查看函数

如下

Python>import inspect
Python>inspect.getsource(SegByName)
def SegByName(segname): return selector_by_name(segname) 


读取光标所在的位置:ScreenEA(),here()

读取段:

  • 读取段名称:idc.SegName(addr)
  • 遍历段:idautils.Segments()返回一个可迭代对象,通过这个对象来获取模块的segment,
  • 获取段首地址:idc.SegStart(seg)
  • 获取段结束地址:idc.SegEnd(seg)
  • 读取下一个段:idc.NextSeg(seg)
  • 根据段名称获取段个数:idc.SegByName(segname)

读取函数:

  • 获取所有导出的函数:idc.Functions()返回一个可迭代对象,利用for来迭代,每次返回一个函数地址func_addr

  • 获取指定返回的导出函数:idc.Functions(start,end) 会将start和end之间的函数迭代出来

  • 获取函数名称:idc.GetFunctionName(func_addr)

  • 获取函数的首地址和结束地址:

  • func=idaapi.get_func(func_addr)

  • 这里的func是一个func_t对象,

  • 可以通过访问start_ea和end_ea来获取到函数的起始地址和结束地址
    start=func.start_ea
    end=func.end_ea

  • 获取下一个函数:idc.NextFunction(addr)

  • 获取上一个函数:idc.PrevFunction(addr)

  • 读取函数的起始地址:idc.GetFunctionAttr(addr,FUNCATTR_START)

  • 读取函数的结束地址:idc.GetFunctionAttr(addr,FUNCATTR_END)

读取指令:

  • 读取助记符:idc.GetMnem(addr)
  • 读取操作数1:idc.GetOpnd(addr,0)
  • 读取操作数2:idc.GetOpnd(addr,1)
  • 读取操作数1的类型:idc.GetOpType(addr,0)
  • 读取操作数2的类型:idc.GetOpType(addr,1)
  • 读取汇编指令:idc.GetDisasm(addr)
  • 读取函数的所有指令地址:idautils.FuncItems(addr) 可以通过将得到的是强转为一个list对象,也可以直接迭代,推荐使用此方法来读取指令
  • 读取当前指令的上一条指令地址:idc.PrevHead(addr)
  • 读取当前指令的下一条指令地址:idc.NextHead(addr)

未完…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

idapython常用api记录7.0 的相关文章

  • binwalk 提取bootimg_使用 IDA 处理 U-Boot 二进制流文件

    作者 xff1a Hcamael 64 知道创宇404实验室 最近在研究IoT设备的过程中遇到一种情况 一个IoT设备 xff0c 官方不提供固件包 xff0c 网上也搜不到相关的固件包 xff0c 所以我从flash中直接读取 因为系统是
  • 【Tools系列】IDA远程调试Linux文件

    Date 2023 4 28 文章目录 1 工具安装 2 IDA linux server 参考 1 工具安装 IDA Pro 7 2 2 IDA linux server 1 进入到IDA的安装目录 找到文件夹 dbgsrv 其中有两个文
  • 静态分析:IDA逆向代码段说明 text、idata、rdata、data

    通常IDA对一个PE文件逆向出来的代码中 xff0c 存在四个最基本的段text idata rdata data xff0c 四个段为PE文件的结构中对应的段 一 text段 xff1a 该段位程序代码段 xff0c 在该段一开始就可以看
  • Linux下的虚拟化部署

    文章目录 1 kvm安装条件 2 kvm虚拟化安装 3 kvm虚拟化相关信息 4 手动安装虚拟机 5 虚拟机管理命令 6 虚拟机在linux系统中传输 7 虚拟机快照 8 脚本执行新建 快照 修复虚拟机 9 虚拟机网络配置 1 kvm安装条
  • IDA调试小技巧

    IDA脚本 MakeNameEX IDA官方链接 实际运用 MakeNameEX MakeNameEx long ea string name long flags SN CHECK ea linear address name new n
  • 【安卓逆向】爱加密so层静态分析

    因为这个是比较久远的apk 所以高版本是运行不起来的 学习的目的是了解一下以前的加固方式 也是划水 哈哈 下一次更新 我这边也打算写一篇关于小x书APP的协议分析 感兴趣的同学可以关注一下 应该就是在这几天更新 有问题也可以加我vx3481
  • 解决:Oops internal error 40343 occured.Further work is not possible and IDA will close (打开文件出现40343错误)

    问题 IDA pro打开文件出现40343错误 解决方法 换一个安装目录或者重新软件 修改文件名名称 不能是中文 测试 最后修改了文件夹名称为全英文就可以 打开了 希望对大家有所帮助谢谢大家观看
  • 电磁兼容RE典型整改案例分析

    1 可视对讲门铃EMI解决方案 客户介绍 珠海某电子科技有限公司是一家专门从事智能家居和楼宇对讲生产 研发 销售为一体的科技型企业 经客户转介绍认识 因其有一个新研发的高端出口可视对讲系统在深圳宝安某检测公司进行空间 RE 辐射测试EN55
  • WSA - root,frida与ida测试

    本文旨在配置windows subsystem for android win安卓子系统 来作为win在开启了hyper v的情况下的一种轻量的安卓模拟器方案 使用MagiskOnWsa设置root权限 最终使其正常与开发环境 frida
  • 浅谈逆向——静态分析简介(静态分析1)

    浅谈逆向 IDA简介 IDA PRO IDA反汇编选项配置 IDA界面简介 交叉参考 参考重命名 标签 创建函数 代码和数据的转换 IDA 对简单结构的处理 IDA对复杂结构的处理 IDA调试器 IDA PRO IDA是按照区块装载PE文件
  • 正则表达式验证邮箱格式

    需满足的验证逻辑 之前必须有内容且只能是字母 大小写 数字 下划线 减号 点 和最后一个点 之间必须有内容且只能是字母 大小写 数字 点 减号 且两个点不能挨着 最后一个点 之后必须有内容且内容只能是字母 大小写 数字且长度为大于等于2个字
  • 初识IDA工具

    工具 IDA工具 链接 https pan baidu com s 1Zgzpws6l2M5j1wkCZHrffw 提取码 ruyu 里面有安装密码 PassWord qY2jts9hEJGy 里面分析32位和64位启动快捷方式 打开IDA
  • ARM汇编指令转为c源码

    TODO
  • [译文]PHP 正则表达式入门 Getting Started with PHP Regular Expressions

    PHP 正则表达式入门 Getting Started with PHP Regular Expressions 译者注 本文是面向0正则基础的phper 很多正则的高级使用都没有涉及到 仅仅是一份简单的入门 对于有基础的 可直接查看本文末
  • 0.IDA-基本操作

    打开IDA 拖拽一个EXE文件进去 首先会弹出如下窗口 Kernel option1 Kernel option2 Processor option这三个选项会控制反汇编引擎的工作状态 一般按默认即可 大多数情况下 分析选项的默认值在准确性
  • Python 基础 之 正则表达式re解析匹配同时获取字符串中的 单引号‘’、双引号“”内的内容

    Python 基础 之 正则表达式re解析匹配同时获取字符串中的 单引号 双引号 内的内容 目录
  • Visual Stdio调试IDAPython脚本

    1 安装VS插件PTVS 这一步与第2步中安装版本应该一致 否则最后调试时会连不上 https github com Microsoft PTVS 2 安装python模块PTVSD pip install ptvsd 3 写如下代码ptv
  • IDA详细使用教程

    文章目录 软件介绍 目录结构 启动页面 IDA文件加载 界面介绍 常用快捷键 操作概述 函数操作 数据类型操作 导航操作 类型操作 关闭数据库 软件介绍 Ollydbg 仅仅是运行于 Windows 用户模式下的一种 32 位调试器 而 I
  • CS:覆盖对 IDA 输出中的全局变量的访问,例如 mov eax、cs:x?

    我正在编写简单的程序然后分析它们 今天我写了这个 include
  • PE - 区分数据和函数导出

    我正在尝试找到一种方法来确定 IDA 中哪些导出是数据导出 哪些是实际函数导出 For example let s have a look at Microsoft s msftedit dll s export entries While

随机推荐

  • Unicode编码小结

    Unicode编码 一 ASCLL码 ASCII American Standard Code for Information Interchange 美国信息交换标准代码 是基于拉丁字母的一套电脑编码系统 主要用于显示现代英语和其他西欧语
  • Flutter 扫描插件开发qrscan

    首先在pubspec yaml中集成 dependencies qrscan 0 2 17 在androd清单文件中加入以下权限
  • Ubuntu安装X11

    Qt实现linux无边框界面需要用到Xlib 安装X11命令如下 sudo apt get install libx11 dev libxext dev libxtst dev libxrender dev libxmu dev libxm
  • align-content 设置多行下的子元素排列方式 代码和图片展示

    align content 适用于 换行 多行 的情况下 单行无效 可以设置上对齐 居中拉伸和平均分配剩余空间等属性值 属性值 flex start 默认值 在侧轴头部开始排列 flex end 在侧轴尾部开始排列 center 在侧轴中间
  • 编程练习3-将文件a处理为文件b

    初始文件a txt a b c d e f o p q r s t 处理后文件b txt a b a b c d a b c d e f o p o p q r o p q r s t shell bin bash array1 awk p
  • 虚拟主机的数据库服务器怎么填,虚拟主机的数据库服务器怎么填

    虚拟主机的数据库服务器怎么填 内容精选 换一换 云服务器备份 云服务器备份可以对普通服务器进行整机备份或部分磁盘备份 不适用于部署了数据库等应用的服务器 支持备份弹性云服务器ECS和裸金属服务器BMS 成本相对于VBS较高 适合对需要备份整
  • anaconda 创建虚拟环境

    创建虚拟环境 conda create n 名字 python 版本号 e g conda create n test python 3 10 删除虚拟环境 conda remove n 名字 all e g conda remove n
  • 大数据之hive(数据仓库工具)的分组和分区操作

    注 在对hive的概念 优缺点 安装部署和参数配置在之后再进行总结 本小节主要对hive中的分组和分区进行总结 一 分组 1 group by语句 group by通常和聚合函数一起使用 按照一个或者多个列进行分组 然后对每个组进行聚合操作
  • Visual Studio 将json转换为实体类

    先复制你的json文本然后
  • JDK源码 --

    Object类 一 简介 gt java lang Object 是Java所有类的父类 在你编写一个类的时候 若无指定父类 没有显式extends一个父类 会默认的添加Object为该类的父类 在JDK 6之前是编译器处理 即编译后的zc
  • 【Python中线程和进程详解】

    一 区别 几乎所有的操作系统都支持同时运行多个任务 每个任务通常是一个程序 每一个运行中的程序就是一个进程 即进程是应用程序的执行实例 现代的操作系统几乎都支持多进程并发执行 注意 并发和并行是两个概念 并行指在同一时刻有多条指令在多个处理
  • 配置NFS服务器-debian

    NFS Network Files System 是网络文件系统的英文缩写 由Sun公司于1980年开发 用于在UNIX操作系统间实现磁盘文件共享 在Linux操作系统出现后 NFS被Linux继承 并成为文件服务的一种标准 通过网络 NF
  • 施耐德电气携中国信通院和中国联通共同发布白皮书,共探5G+PLC深度融合应用

    2023年9月20日 全球能源管理和自动化领域的数字化转型专家施耐德电气在第23届中国国际工业博览会首日的9月19日 与中国信息通信研究院 以下简称 中国信通院 及中国联合网络通信集团有限公司 以下简称 中国联通 联手重磅发布 5G PLC
  • 6.SSH框架整合及简单使用示例

    6 SSH框架整合 ssh spring spring mvc hibernate 6 1 整合的场所 web xml 跟 5 ssm框架 整合类似 可以对照学习 通过监听器配置hibernate 通过servlet配置mvc web xm
  • 设计模式之观察者模式(Observer)摘录

    23种GOF设计模式一般分为三大类 创建型模式 结构型模式 行为模式 创建型模式抽象了实例化过程 它们帮助一个系统独立于如何创建 组合和表示它的那些对象 一个类创建型模式使用继承改变被实例化的类 而一个对象创建型模式将实例化委托给另一个对象
  • 2021蓝桥杯模拟赛-跳跃

    题目 题目链接 题解 动态规划 算是比较基础的状态方程和状态定义 但是难点在于处理负权重的情况 代码 include
  • 通过微信小程序实现登录功能

    后端服务器可以在CSDN上开通 价格优惠 CSDN开发云 https img home csdnimg cn images 20220518054835 png https dev csdn net activity utm source
  • Java多线程(7):并发_线程同步_队列与锁(Synchronized)

    一 并发举例 线程不安全 1 两个人同时操作一张银行卡 如何保证线程安全 2 多个人同时购买一张火车票 谁能买到 二 并发特点 1 同一个对象 2 被多个线程操作 3 同时操作 三 如何保证线程安全 线程同步 队列 锁 1 使用队列的技术一
  • 走路步数怎么在屏幕上显示_华为走步步数不在屏幕上显示如何设置

    展开全部 1 打开手机的设置选项 找到 安全和隐私一栏 点击进入 2 进入后下拉屏幕 32313133353236313431303231363533e4b893e5b19e31333365666262找到并且选择 锁屏和密码 3 进入后在
  • idapython常用api记录7.0

    2019 02 13 idapython常用api记录 以下代码片段可以在ida的output窗口中测试用 需要引入相关的模块即可 import idaapi import idc import idautils 后续需要使用的程序代码指令