|
逆向工程中函数的识别发表时间:2021-05-21 10:57 函数是高档语言中的一种代码封装办法,它把一段能够被重复调用的代码封装起来,以防止写程序时的重复劳动。函数在逻辑上具有相对独立的内存环境,一个函数既能够承受多个参数也能够不承受任何参数,既能够回来履行成果也能够不回来任何成果,可是它有必要确保在履行结束后能回来到调用代码的正确方位上持续履行。 因而从逆向工程的视点来看,函数要想在履行结束后能回来到正确的方位并持续履行其他代码,就要求主程序在调用函数时应首要保存回来地址并传递给函数,其非必须考虑的就是参数传入与栈平衡问题(也能够理解为参数与局部变量的保存问题)。关于仓库平衡问题咱们能够以一个假设来愈加形象地知道它。 咱们知道函数的参数与局部变量都是保存在栈中的,一般状况下运用栈寄存器ESP加上偏移即可拜访到咱们需求的数据。可是假如此刻咱们调用了一个函数,它很有可能会具有自己的参数与局部变量,因而免不了要对仓库进行必定的操作,假如此刻不加任何处理就回来到主程序中,就会引起ESP的紊乱,导致主程序无法正确拜访自己的参数与局部变量。 关于这种状况,咱们有必要要进行处理,可是终究应该由谁来处理呢?是调用者仍是被调用的函数自身?很显然咱们需求一个约好。正是由于有了这个问题,才诞生了四个函数调用约好,不光规则了仓库由谁来整理,还规则了调用函数时参数的入栈次序。这四个约好分别是C标准约好、Pascal标准约好、快速调用约好与标准调用标准约好。 |