标签:
有时我们想要将app中的某个函数的逻辑提取出来,用gcc重新编译一个可执行文件,比如我们想要写一个注册机,就需要把app生成key的逻辑提取出来。但是ida ”F5”过后的c语言直接编译经常会有很多错误,比如未定义的宏,未定义的声明等。这是因为这些宏都在ida的一个头文件里。里面定义了所有ida自定义的宏和声明,比如说经常见到的BYTEn()宏:
1
2
3
|
#define BYTEn(x, n) (*((_BYTE*)&(x)+n)) #define BYTE1(x) BYTEn(x, 1) // byte 1 (counting from 0) #define BYTE2(x) BYTEn(x, 2) |
加上这个”defs.h”头文件后就可以正常的编译ida ”F5”后的c语言了。
另外我们还可以自己创建一个NDK项目,然后自己编写一个so或者elf利用dlopen()和dlsym()调用目标so中的函数。比如我们想要调用libdvm.so中的dvmGetCurrentJNIMethod()函数,我们就可以在我们的NDK项目中这么写:
1
2
3
4
5
|
typedef void * (*dvmGetCurrentJNIMethod_func)(); dvmGetCurrentJNIMethod_func dvmGetCurrentJNIMethod_fnPtr; dvm_hand= dlopen( "libdvm.so" , RTLD_NOW); dvmGetCurrentJNIMethod_fnPtr =dlsym(dvm_hand, "_Z22dvmGetCurrentJNIMethodv" ); dvmGetCurrentJNIMethod_fnPtr(); |
标签:
原文地址:http://www.cnblogs.com/joey-hua/p/4702841.html