逆向笔记之部分常见函数

参考MSDN官方文档,长期更新,将在实践中的常见函数列出来。



MK_FP

原型: #define MK_FP( seg,ofs )( (void _seg * )( seg ) +( void near * )( ofs ))

说明:设置一个远指针,一般会前后异或,可以用来判断内存修改,分析函数有没有溢出。

例如:*MK_FP(__FS__, 40LL),取FS段偏移量为40LL地址的值

JUMPOUT

说明:IDA中用于建立一个长跳转的函数,其参数一般为一个具体的函数开始地址。


ptrace

原型:long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);

说明 :提供了父进程观察和控制其子进程执行的能力,发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,这也是调试器主要原理。

1). enum __ptrace_request request:指示了ptrace要执行的命令。如:PTRACE_SETREGS---设置寄存器;PTRACE_GETREGS---读取寄存器;PTRACE_KILL---杀掉子进程,使它退出。

详细request参数解释:http://blog.csdn.net/u012417380/article/details/60468697

2). pid_t pid: 指示ptrace要跟踪的进程。

3). void *addr: 指示要监控的内存地址。

4). void *data: 存放读取出的或者要写入的数据。


scanf

原型: int scanf(char *format[,argument,...]);

说明:通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。


sscanf

原型:int sscanf (const char *str,const char * format,........);

说明:与scanf类似,但是以固定字符串为输入源,sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果存于对应的参数内。成功则返回参数数目,失败则返回0。

例如:sscanf("12345","%4s",str);    -->str=1234


std::basic_ostream

这是一个IO流操作函数,可以建立std::cin与std::cout和>>以及<<的操作方式,实现cin与cout库函数,如一个例子中:std::basic_ostream>::operator<<(v0, std::endl);  就等价于cout<<endl;



_cinit

如果有全局类数组,在main之前类数组会被初始化, 类的构造会被调用。

第一步_FPinit 主要用来初始化浮点运算,第二步和第三步是分别对C和C++程序做初始化。_initterm 接受两个指针作为参数。全局类的初始化由_cinit的第二个_initterm发起.

// __xc_a(函数指针表开始地址) 和 __xc_z (函数指针表结束地址) 是编译器填写的// 从__xc_a开始, 到 (__xc_z - 4)是函数指针表, 里面的内容是代理函数地址.

_initterm( __xc_a, __xc_z );///< 负责全局类的初始化, 调用类的构造

实例ida中转化成地址的数据识别出对应函数

可以考虑使用idapython编写脚本解决这些函数数据的转化,以及去除函数的空嵌套的情况。


PeekMessage

原型:BOOLPeekMessage( LPMSG IpMsg, HWND hWnd, UINT wMSGfilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);

说明:为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。IpMsg为接收消息信息的MSG结构指针;hWnd为其消息被检查的窗口句柄。和函数GetMessage不一样的是,GetMessage:从系统获取消息,将消息从系统中移除,属于阻塞函数。当系统无消息时,GetMessage会等待下一条消息。而函数PeekMesssge是以查看的方式从系统中获取消息,可以不将消息从系统中移除,是非阻塞函数;当系统无消息时,返回FALSE,继续执行后续代码。一般用为输入等操作的信息获取。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 接着上节 condition_varible ,本节主要介绍future的内容,练习代码地址。本文参考http:/...
    jorion阅读 15,083评论 1 5
  • Linux 进程管理与程序开发 进程是Linux事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源,...
    JamesPeng阅读 2,619评论 1 14
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,623评论 0 6
  • 人是不是随着年龄的增长 真的会看透很多事 明白许多道理呢? 或许真的是这样, 渐渐习惯了, 也莽莽撞撞懂了, 大概...
    元气满满的慧慧酱阅读 160评论 0 1
  • 对着屏幕发呆,耳机里是崔健的(花房姑娘),有时间歌曲听的是歌词,心境,这种共鸣能击打到心底最柔软的地方,窗外的景色...
    揣着半自动的巧克力阅读 500评论 0 1

友情链接更多精彩内容