简介
在Windows下使用开发DyanmoRIO插件过程中,记录遇到的坑和解决的方法。
本次开发的最终目的是,开发一个Windows平台下,特定模块的函数执行迹的记录工具。其中包括模块名称,函数地址,函数名称等。
开发过程中遇到的坑
drmgr_register_tls_field() 为每个线程保留 线程本地存储(tls)插槽。返回槽的索引,该索引可以传递给drmgr_get_tls_field()和drmgr_set_tls_field()。如果没有可用的插槽,则返回-1。所谓 tls 就是每个线程专属的一个存储器。通过 drmgr_set_tls_field() 来设定tls里的值,用 drmgr_get_tls_field() 用来获取tls 里面的值。
drmgr_set_tls_field 把当前线程创建的相关结构数据存放到了当前线程的tls里。这样,就可以在其他回调函数调用这个数据进行操作了。