CN115543341A - 一种基于内联函数分析的内核函数动态定位方法 - Google Patents

一种基于内联函数分析的内核函数动态定位方法 Download PDF

Info

Publication number
CN115543341A
CN115543341A CN202211495640.5A CN202211495640A CN115543341A CN 115543341 A CN115543341 A CN 115543341A CN 202211495640 A CN202211495640 A CN 202211495640A CN 115543341 A CN115543341 A CN 115543341A
Authority
CN
China
Prior art keywords
function
kernel
inline
derived
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202211495640.5A
Other languages
English (en)
Other versions
CN115543341B (zh
Inventor
温研
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Linzhuo Information Technology Co Ltd
Original Assignee
Beijing Linzhuo Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Linzhuo Information Technology Co Ltd filed Critical Beijing Linzhuo Information Technology Co Ltd
Priority to CN202211495640.5A priority Critical patent/CN115543341B/zh
Publication of CN115543341A publication Critical patent/CN115543341A/zh
Application granted granted Critical
Publication of CN115543341B publication Critical patent/CN115543341B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种基于内联函数分析的内核函数动态定位方法,通过分析已有内核版本的源代码为未导出内核函数建立内核函数依赖库及内联函数特征库,在内核模块加载过程中对于存在内联函数代码的未导出内核函数采用内联函数代码动态构建未导出内核函数的代码区域,对于不存在内联函数代码的未导出内核函数则根据内核函数依赖库迭代查找未导出内核函数的内核地址,从而在不修改内核代码、不依赖内核函数的情况下实现了运行时的未导出内核函数的内核地址的动态获取。

Description

一种基于内联函数分析的内核函数动态定位方法
技术领域
本发明属于计算机技术领域,具体涉及一种基于内联函数分析的内核函数动态定位方法。
背景技术
Linux内核用来管理软件发出的数据I/O(输入与输出)要求,将这些要求转译为数据处理的指令,交由中央处理器(CPU)及计算机中其他电子组件进行处理,是操作系统中最基本的部分。内核函数一般指内核支持函数,又称例程,是指只能在内核模式下调用的例程或子程序,目的是保证内核支持函数不被用户程序破坏。
编写Linux内核模块时往往需要使用其他模块提供的内核函数,从Linux 2.6版本内核开始引入了导出符号的机制,只有在内核中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL导出的符号才能在内核模块中被直接使用。由于Linux系统版本间的差异性等问题,并不是所有内核函数都存在与之对应的导出符号,例如,在3.8.0版本的内核中内核函数do_page_fault就未被导出,这就会导致内核模块加载失败。
现有的获取Linux内核未导出符号的方式主要包括:修改Linux内核、使用kallsyms_lookup_name读取、读取/boot/System.map-<kernel-version>后再使用内核模块参数传入内核模块及读取/proc/kallsyms后再使用内核模块参数传入内核模块等,然而,由于某些内核文件不支持被修改或是依赖的函数本身也未被导出等问题,在内核模块运行过程中上述方法的有效性均存在一定的局限。
发明内容
有鉴于此,本发明提供了一种基于内联函数分析的内核函数动态定位方法,能够实现运行时的未导出内核函数内核地址的动态获取。
本发明提供的一种基于内联函数分析的内核函数动态定位方法,具体包括以下步骤:
步骤1、根据Linux内核版本源代码,建立未导出内核函数的内核函数依赖库,对于存在内联可能的未导出内核函数建立内联函数特征库,其中,内核函数依赖库保存由多个具有调用关系的函数节点组成的、起点为已导出内核函数且终点为未导出内核函数的函数调用关系,函数节点采用函数名及被调用位次表示,被调用位次是指该函数节点在上级函数节点中第一次被调用时在上级函数节点的所有函数调用中的排序;内联函数特征库保存与未导出内核函数相关的内联函数代码;
步骤2、加载包含未导出内核函数的内核模块,查找内联函数特征库,若存在未导出内核函数的记录且记录为二元组,则执行步骤3;若存在未导出内核函数的记录且记录为四元组,则获取所有包含未导出内核函数的四元组执行步骤4;若不存在未导出内核函数的记录,则执行步骤5;
步骤3、将内联函数代码的长度记为CodeLength;动态申请大小为MemoryLength字节、起始地址为CodeAddress的内存,且将该内存的权限设置为可读写与可执行,其中,MemoryLength的取值为CodeLength与设定偏移量之和;在CodeAddress地址处写入与函数入口初始化操作相关的二进制代码,该二进制代码的长度为FunctionEntryCodeLength,执行函数入口的初始化操作,再将内联函数代码复制到CodeAddress+FunctionEntryCodeLength地址处,在内联函数代码后写入函数返回指令;将CodeAddress作为未导出内核函数的内核地址,结束本流程;
步骤4、获取四元组中的已导出内核函数的内核地址,采用所有四元组中的内联函数代码逐一与已导出内核函数的当前二进制代码进行代码匹配,选取具有最高相似度的内联函数代码作为未导出内核函数的内联函数代码,执行步骤3;
步骤5、查找内核函数依赖库得到未导出内核函数相关的函数调用关系,从函数调用关系中起点位置的已导出内核函数的内核地址处开始执行反编译,再根据函数节点中的调用位次依次获取下级函数节点的内核地址,直至获取未导出内核函数的内核地址,结束本流程。
进一步地,所述步骤1中所述函数调用关系为:采用有向图表示,有向图中的节点表示函数节点,有向图中的有向边表示函数间的调用关系。
进一步地,所述步骤1中所述对于存在内联可能的未导出内核函数建立内联函数特征库的过程,包括以下步骤:
步骤1.1、在Linux内核版本源代码中,若存在已导出内核函数对未导出内核函数的调用,则执行步骤1.2;若调用未导出内核函数的内核函数为未导出内核函数,则执行步骤1.5;
步骤1.2、选取编译优化选项,编译调用了未导出内核函数的已导出内核函数所在的代码文件得到目标文件;
步骤1.3、对步骤1.2中得到的目标文件进行反编译,确定未导出内核函数的调用处是否为调用语句,如果是则执行步骤1.4;如果不是则获取未导出内核函数的内联函数代码,将由未导出内核函数、已导出内核函数、编译优化选项及内联函数代码组成的四元组作为内联函数特征保存到内联函数特征库中,执行步骤1.4;
步骤1.4、若未遍历编译优化选项,则更换编译优化选项执行步骤1.2;否则结束当前流程;
步骤1.5、选取编译优化选项,编译调用了未导出内核函数的内核函数所在的代码文件生成目标文件;
步骤1.6、对步骤1.5中得到的目标文件进行反编译,确定未导出内核函数的调用处是否为调用语句,如果是则执行步骤1.7;如果不是则获取未导出内核函数的内联函数代码,将由未导出内核函数及内联函数代码组成的二元组作为内联函数特征保存到内联函数特征库中,执行步骤1.7;
步骤1.7、若未遍历编译优化选项,则更换编译优化选项执行步骤1.5;否则结束当前流程。
进一步地,所述步骤3中所述将CodeAddress作为未导出内核函数的内核地址之后将CodeAddress地址对应内存的权限设置为可读与可执行。
进一步地,所述步骤3中的所述设定偏移量为256字节。
进一步地,所述编译优化选项为:“-O”、“-O1”、“-O2”、“-O3”或“-Ofast”。
有益效果:
本发明通过分析已有内核版本的源代码为未导出内核函数建立内核函数依赖库及内联函数特征库,在内核模块加载过程中对于存在内联函数代码的未导出内核函数采用内联函数代码动态构建未导出内核函数的代码区域,对于不存在内联函数代码的未导出内核函数则根据内核函数依赖库迭代查找未导出内核函数的内核地址,从而在不修改内核代码、不依赖内核函数的情况下实现了运行时的未导出内核函数的内核地址的动态获取。
具体实施方式
下面列举实施例,对本发明进行详细描述。
本发明提供的一种基于内联函数分析的内核函数动态定位方法,包括以下步骤:
步骤1、确定需要使用的未导出内核函数,根据已公开的Linux内核版本源代码,建立未导出内核函数的内核函数依赖库,对于存在内联可能的未导出内核函数建立内联函数特征库,其中,内核函数依赖库用于保存由多个具有调用关系的函数节点组成的、起点为已导出内核函数且终点为未导出内核函数的函数调用关系,函数节点采用函数名及被调用位次表示,被调用位次是指该函数节点在上级函数节点中第一次被调用时在上级函数节点的所有函数调用中的排序;内联函数特征库用于保存与未导出内核函数相关的内联函数代码。
与未导出内核函数相关的函数调用关系可采用有向图来表示,有向图由节点和有向边组成,节点表示函数节点包括函数名及调用位次,有向边表示函数间的调用关系,由此,内核函数依赖库采用图数据结构来表示。建立未导出内核函数的内核函数依赖库的方式为:分析已公开的Linux内核版本源码从中获取与未导出内核函数相关的所有调用路径,从所有调用路径中选取起点为已导出内核函数、终点为未导出内核函数的路径作为与未导出内核函数相关的函数调用关系保存到内核函数依赖库中。
若未导出内核函数的声明中包含内联相关的关键字,如inline等,或者采用最高级别的优化选项对内核模块进行编译后,未导出内核函数都存在成为内联函数的可能,即存在内联可能,因此为了实现动态获取内核函数的内核地址,就需要对未导出内核函数可能产生的内联的情况进行分析,进而建立未导出内核函数的内联函数特征库。对于存在内联可能的未导出内核函数,建立未导出内核函数的内联函数特征库的过程,包括以下步骤:
步骤1.1、分析已公开的Linux内核版本源代码,若存在已导出内核函数对未导出内核函数的调用,则执行步骤1.2;若调用未导出内核函数的内核函数为未导出内核函数,则执行步骤1.5。
步骤1.2、选取编译优化选项,编译调用了未导出内核函数的已导出内核函数所在的代码文件得到目标文件。
步骤1.3、对步骤1.2中得到的目标文件进行反编译,确定未导出内核函数的调用处是否为调用语句,如果是则说明未导出内核函数未转换为内联函数,执行步骤1.4;如果不是则说明未导出内核函数已转换为内联函数,获取该内联函数的内联函数代码,将由未导出内核函数、已导出内核函数、编译优化选项及内联函数代码组成的四元组作为内联函数特征保存到内联函数特征库中,执行步骤1.4。
步骤1.4、若未遍历编译优化选项,则更换编译优化选项执行步骤1.2;否则结束当前流程。其中,编译优化选项如-O、-O1、-O2、-O3及-Ofast等。
步骤1.5、选取编译优化选项,编译调用了未导出内核函数的内核函数所在的代码文件生成目标文件。
步骤1.6、对步骤1.5中得到的目标文件进行反编译,确定未导出内核函数的调用处是否为调用语句,如果是则说明未导出内核函数未转换为内联函数,执行步骤1.7;如果不是则说明未导出内核函数已转换为内联函数,获取该内联函数的内联函数代码,将由未导出内核函数及内联函数代码组成的二元组作为内联函数特征保存到内联函数特征库中,执行步骤1.7。
步骤1.7、若未遍历编译优化选项,则更换编译优化选项执行步骤1.5;否则结束当前流程。
步骤2、加载包含未导出内核函数的内核模块,在内核模块的入口处查找内联函数特征库,若存在未导出内核函数的相关记录且记录为二元组,则执行步骤3;若存在未导出内核函数的相关记录且记录为四元组,则获取所有包含未导出内核函数的四元组执行步骤4;若不存在未导出内核函数的相关记录,则执行步骤5。
步骤3、获取内联函数代码的长度,记为CodeLength;动态申请大小为MemoryLength字节、起始地址为CodeAddress的内存,且将该内存的权限设置为可读写与可执行,其中,MemoryLength的取值为CodeLength与设定偏移量之和,例如,MemoryLength=CodeLength+256;在CodeAddress地址处写入与函数入口初始化操作相关的二进制代码,该二进制代码的长度为FunctionEntryCodeLength,并执行函数入口的初始化操作,再将内联函数代码复制到CodeAddress+FunctionEntryCodeLength地址处,并在内联函数代码后写入函数返回指令;将CodeAddress作为未导出内核函数的内核地址,结束本流程。
为了进一步提高代码执行的安全性,在步骤3得到未导出内核函数的内核地址后将内存的权限设置为可读与可执行。
步骤4、获取四元组中的已导出内核函数的内核地址,采用所有四元组中的内联函数代码逐一与已导出内核函数的当前二进制代码进行代码匹配,选取具有最高相似度的内联函数代码作为未导出内核函数的内联函数代码,执行步骤3。
由于用户无法确定当前系统中加载和运行内核模块时实际采用的编译优化选项,因此,本发明采用内联函数特征库中保存的基于不同编译优化选项编译生成的二进制代码即内联函数代码,逐一与当前动态生成的已导出内核函数的二进制代码段进行代码匹配,具有最高代码相似度的内联函数代码即为基于与当前系统实际采用的编译优化选项相同的编译优化选项生成的二进制代码。
步骤5、查找内核函数依赖库得到未导出内核函数相关的函数调用关系,通过从函数调用关系中起点位置的已导出内核函数的内核地址处开始执行反编译,并根据函数节点中的调用位次依次获取下级函数节点的内核地址,直到获取未导出内核函数的内核地址。具体包括以下步骤:
步骤5.1、获取函数调用关系中起点的函数节点的信息,即获取了已导出内核函数的函数名,根据函数名获取已导出内核函数的内核地址EntryAddress。
步骤5.2、获取下级函数节点的调用位次,根据该调用位次即可获取其在上级函数节点的所有函数调用中的相对顺序位次,从EntryAddress处开始执行当前函数节点的反编译,执行到调用位次处时,调用位次处的调用指令对应的内核地址即为下级函数节点的内核地址NextAddress。
步骤5.3、若下级函数节点为终点的函数节点,则下级函数节点即为未导出内核函数,下级函数节点的内核地址即为未导出内核函数的内核地址,结束本流程;否则,将NextAddress作为EntryAddress执行步骤5.2。
实施例:
本实施例在Linux系统上采用本发明提供的一种基于内联函数分析的内核函数动态定位方法实现了对多个未导出内核函数的动态定位,具体包括以下步骤:
S1、确定需要使用的多个未导出内核函数,建立未导出内核函数列表,记为UnexportedFunctionList。
S2、分析Linux社区发布的每个内核版本,为UnexportedFunctionList中的每个未导出内核函数UnexportedFunction构建内核函数依赖库,并为其中存在内联可能的UnexportedFunction建立内联函数特征库。
其中,构建内核函数依赖库的过程为:
分析已公开的Linux内核版本源码从中获取与未导出内核函数相关的所有调用路径,具体来说,可采用C/C++源码分析工具对Linux内核版本源码进行分析,也可访问Linux的内核源码交叉引用数据库获取所有调用路径,Linux的内核源码交叉引用数据库的网址为https://elixir.bootlin.com/linux/latest/source;在所有调用路径中,选取起点为已导出内核函数且终点为UnexportedFunction的函数调用关系,函数节点采用函数名及被调用位次组成的二元组描述。
若UnexportedFunction的声明中存在与内联函数相关的inline等关键字,则说明UnexportedFunction存在内联可能,或者通过分析调用了UnexportedFunction的函数的所在代码文件的目标文件即可判断该UnexportedFunction是否在使用最高级别的编译优化选项(-Ofast)编译后形成了内联函数。
对于存在内联可能的UnexportedFunction构建内联函数特征库的过程包括以下步骤:
S2.1、分析已公开的Linux内核版本源码,若存在已导出内核函数对UnexportedFunction的调用,则执行S2.2;若调用UnexportedFunction的内核函数为未导出内核函数,则执行S2.5。
S2.2、从-O、-O1、-O2、-O3、-Ofast等编译优化选项选择一项,编译调用了UnexportedFunction的已导出内核函数KernelFunctionCalledUnexportedInlinedFunc所在的代码文件,得到“.o”的目标文件。
S2.3、反编译该“.o” 目标文件,判断调用UnexportedFunction的位置是否为调用语句,如果是则说明UnexportedFunction未转换为内联函数,执行S2.4;如果不是则说明UnexportedFunction已转换为内联函数,获取UnexportedFunction被内联后生成的代码即内联函数代码,将UnexportedFunction、KernelFunctionCalledUnexportedInlinedFunc、编译优化选项及内联函数代码作为四元组加入内联函数特征库中,执行S2.4。
S2.4、若未遍历编译优化选项,则更换编译优化选项执行S2.2;否则结束当前流程。
S2.5、从-O、-O1、-O2、-O3、-Ofast等编译优化选项选择一项,编译调用了UnexportedFunction的未导出内核函数所在的代码文件,得到“.o”的目标文件。
S2.6、反编译该“.o” 目标文件,判断调用UnexportedFunction的位置是否为调用语句,如果是则说明UnexportedFunction未转换为内联函数,执行S2.7;如果不是则说明UnexportedFunction已转换为内联函数,获取UnexportedFunction被内联后生成的代码即内联函数代码,将UnexportedFunction及内联函数代码作为四元组加入内联函数特征库中,执行S2.7。
S2.7、若未遍历编译优化选项,则更换编译优化选项执行S2.5;否则结束当前流程。
S3、加载内核模块,在内核模块入口处根据内核版本、内核函数依赖库和内联函数特征库动态获取UnexportedFunctionList中每个UnexportedFunction的内核地址。
S3.1、在内核模块入口,在内联函数特征库中查找UnexportedFunction,若存在与之对应的记录且为二元组,则执行S3.2;若存在与之对应的记录且为四元组,则执行S3.3;若不存在与之对应的记录,则执行S3.4。
S3.2、获取记录中的内联函数代码,记为InlinedCode,计算InlinedCode的长度记为CodeLength;动态申请大小为CodeLength+256字节的内存,该内存的起始地址记为CodeAddress,并将该内存的权限设置为可读写及可执行;在CodeAddress的位置写入长度为FunctionEntryCodeLength的与函数入口初始化操作相关的二进制代码,执行如保存栈地址等的函数入口初始化操作;将二元组中的内联函数代码复制到CodeAddress+FunctionEntryCodeLength的位置,并在内联函数代码之后,写入函数返回指令;将UnexportedFunction的入口记为CodeAddress,再将CodeAddress地址处的内存的权限设置为可读及可执行。
S3.3、获取记录中的第二个元素,即调用了UnexportedFunction的已导出内核函数记为KernelFunctionCalledUnexportedInlinedFunc,获取KernelFunctionCalledUnexportedInlinedFunc的内核地址;找到所有第一个元素为UnexportedFunction的四元组,将每个四元组中的内联函数代码与KernelFunctionCalledUnexportedInlinedFunc对应的二进制代码进行代码匹配;其中匹配度最大的内联函数代码记为InlinedCode,执行S3.2。
S3.4、在内核函数依赖库中查找UnexportedFunction相关的函数调用关系,记为CallPath;获取CallPath中的第一个函数节点的函数名,并获取其对应的内核地址,记为EntryAddress;获取CallPath中的第二个节点的二元组中的第二个值即调用位次记为N,从EntryAddress开始反编译当执行到第N个调用指令时即可获取第二个函数节点的内核地址,依次类推,直到获取最后一个节点UnexportedFunction的内核地址。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种基于内联函数分析的内核函数动态定位方法,其特征在于,具体包括以下步骤:
步骤1、根据Linux内核版本源代码,建立未导出内核函数的内核函数依赖库,对于存在内联可能的未导出内核函数建立内联函数特征库,其中,内核函数依赖库保存由多个具有调用关系的函数节点组成的、起点为已导出内核函数且终点为未导出内核函数的函数调用关系,函数节点采用函数名及被调用位次表示,被调用位次是指该函数节点在上级函数节点中第一次被调用时在上级函数节点的所有函数调用中的排序;内联函数特征库保存与未导出内核函数相关的内联函数代码;
步骤2、加载包含未导出内核函数的内核模块,查找内联函数特征库,若存在未导出内核函数的记录且记录为二元组,则执行步骤3;若存在未导出内核函数的记录且记录为四元组,则获取所有包含未导出内核函数的四元组执行步骤4;若不存在未导出内核函数的记录,则执行步骤5;
步骤3、将内联函数代码的长度记为CodeLength;动态申请大小为MemoryLength字节、起始地址为CodeAddress的内存,且将该内存的权限设置为可读写与可执行,其中,MemoryLength的取值为CodeLength与设定偏移量之和;在CodeAddress地址处写入与函数入口初始化操作相关的二进制代码,该二进制代码的长度为FunctionEntryCodeLength,执行函数入口的初始化操作,再将内联函数代码复制到CodeAddress+FunctionEntryCodeLength地址处,在内联函数代码后写入函数返回指令;将CodeAddress作为未导出内核函数的内核地址,结束本流程;
步骤4、获取四元组中的已导出内核函数的内核地址,采用所有四元组中的内联函数代码逐一与已导出内核函数的当前二进制代码进行代码匹配,选取具有最高相似度的内联函数代码作为未导出内核函数的内联函数代码,执行步骤3;
步骤5、查找内核函数依赖库得到未导出内核函数相关的函数调用关系,从函数调用关系中起点位置的已导出内核函数的内核地址处开始执行反编译,再根据函数节点中的调用位次依次获取下级函数节点的内核地址,直至获取未导出内核函数的内核地址,结束本流程。
2.根据权利要求1所述的内核函数动态定位方法,其特征在于,所述步骤1中所述函数调用关系为:采用有向图表示,有向图中的节点表示函数节点,有向图中的有向边表示函数间的调用关系。
3.根据权利要求1所述的内核函数动态定位方法,其特征在于,所述步骤1中所述对于存在内联可能的未导出内核函数建立内联函数特征库的过程,包括以下步骤:
步骤1.1、在Linux内核版本源代码中,若存在已导出内核函数对未导出内核函数的调用,则执行步骤1.2;若调用未导出内核函数的内核函数为未导出内核函数,则执行步骤1.5;
步骤1.2、选取编译优化选项,编译调用了未导出内核函数的已导出内核函数所在的代码文件得到目标文件;
步骤1.3、对步骤1.2中得到的目标文件进行反编译,确定未导出内核函数的调用处是否为调用语句,如果是则执行步骤1.4;如果不是则获取未导出内核函数的内联函数代码,将由未导出内核函数、已导出内核函数、编译优化选项及内联函数代码组成的四元组作为内联函数特征保存到内联函数特征库中,执行步骤1.4;
步骤1.4、若未遍历编译优化选项,则更换编译优化选项执行步骤1.2;否则结束当前流程;
步骤1.5、选取编译优化选项,编译调用了未导出内核函数的内核函数所在的代码文件生成目标文件;
步骤1.6、对步骤1.5中得到的目标文件进行反编译,确定未导出内核函数的调用处是否为调用语句,如果是则执行步骤1.7;如果不是则获取未导出内核函数的内联函数代码,将由未导出内核函数及内联函数代码组成的二元组作为内联函数特征保存到内联函数特征库中,执行步骤1.7;
步骤1.7、若未遍历编译优化选项,则更换编译优化选项执行步骤1.5;否则结束当前流程。
4.根据权利要求1所述的内核函数动态定位方法,其特征在于,所述步骤3中所述将CodeAddress作为未导出内核函数的内核地址之后将CodeAddress地址对应内存的权限设置为可读与可执行。
5.根据权利要求1所述的内核函数动态定位方法,其特征在于,所述步骤3中的所述设定偏移量为256字节。
6.根据权利要求3所述的内核函数动态定位方法,其特征在于,所述编译优化选项为:“-O”、“-O1”、“-O2”、“-O3”或“-Ofast”。
CN202211495640.5A 2022-11-27 2022-11-27 一种基于内联函数分析的内核函数动态定位方法 Active CN115543341B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211495640.5A CN115543341B (zh) 2022-11-27 2022-11-27 一种基于内联函数分析的内核函数动态定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211495640.5A CN115543341B (zh) 2022-11-27 2022-11-27 一种基于内联函数分析的内核函数动态定位方法

Publications (2)

Publication Number Publication Date
CN115543341A true CN115543341A (zh) 2022-12-30
CN115543341B CN115543341B (zh) 2023-02-03

Family

ID=84722062

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211495640.5A Active CN115543341B (zh) 2022-11-27 2022-11-27 一种基于内联函数分析的内核函数动态定位方法

Country Status (1)

Country Link
CN (1) CN115543341B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116243971A (zh) * 2023-05-10 2023-06-09 北京麟卓信息科技有限公司 一种基于静态依赖自举的内核无关的模块构建方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130283017A1 (en) * 2010-12-10 2013-10-24 Daniel Shawcross Wilkerson Hard object: constraining control flow and providing lightweight kernel crossings
CN104573426A (zh) * 2015-01-06 2015-04-29 北京邮电大学 一种可执行应用的混淆方法和装置
CN107992307A (zh) * 2017-12-11 2018-05-04 北京奇虎科技有限公司 一种函数编译方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130283017A1 (en) * 2010-12-10 2013-10-24 Daniel Shawcross Wilkerson Hard object: constraining control flow and providing lightweight kernel crossings
CN104573426A (zh) * 2015-01-06 2015-04-29 北京邮电大学 一种可执行应用的混淆方法和装置
CN107992307A (zh) * 2017-12-11 2018-05-04 北京奇虎科技有限公司 一种函数编译方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116243971A (zh) * 2023-05-10 2023-06-09 北京麟卓信息科技有限公司 一种基于静态依赖自举的内核无关的模块构建方法

Also Published As

Publication number Publication date
CN115543341B (zh) 2023-02-03

Similar Documents

Publication Publication Date Title
KR100311585B1 (ko) 템플릿오브젝트파일들을최적화하기위한시스템과방법
KR100518584B1 (ko) 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US8108315B2 (en) Discovering software code subject to licenses
US5960197A (en) Compiler dispatch function for object-oriented C
US8549502B2 (en) Compiler with user-defined type inference rules
US20080005728A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment
US8458671B1 (en) Method and system for stack back-tracing in computer programs
US20080005727A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity
CN115543341B (zh) 一种基于内联函数分析的内核函数动态定位方法
US7028293B2 (en) Constant return optimization transforming indirect calls to data fetches
US6564373B1 (en) Instruction execution mechanism
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
Bonetta et al. FAD. js: fast JSON data access using JIT-based speculative optimizations
US6877156B2 (en) Recognition of command related items in object code
CN116680015B (zh) 函数调用方法、装置、电子设备及可读存储介质
US7730451B2 (en) Source server
CN117873483A (zh) 一种编译智能合约的方法、装置、电子设备和存储介质
CN111352631B (zh) 一种接口兼容性检测方法及装置
US8091079B2 (en) Implementing shadow versioning to improve data dependence analysis for instruction scheduling
CN114428603A (zh) 一种基于编译器生成short和int类型指令的方法和系统
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
CN100357938C (zh) 最佳化比较语句的执行的数据处理的实现方法和系统
US11308080B2 (en) Function management method and memory device
US7676799B1 (en) Address simplification by binary transformation
CN116775040B (zh) 实现代码疫苗的插桩方法及基于代码疫苗的应用测试方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant