我想在flush-reload
论文中重现一些实验。在这个实验中,有两个线程称为A和B。有一个共享库c。A线程通过flush指令从缓存中刷新共享库c中的指令d 。然后A等待一段时间。然后 A 重新加载指令 d。如果加载时间短,说明d指令在缓存中,说明线程A在等待时线程B使用了这条指令。如果加载指令d的时间较长,说明d指令在内存中,说明线程B在线程A的等待时间内没有使用这条指令。
我想知道如何获取共享库中指令的地址。
例如,我有一个带有函数的共享库print
。我想得到a=a+1
这个函数中指令的地址。经过
gadget_module = dlopen("sym.so", RTLD_LAZY);
probe= (char**)(dlsym(gadget_module,"print"));
我可以得到打印函数的地址,但是我如何得到的地址a=a+1
呢?探针+n? (这应该n
是什么?)如何验证这个地址确实是指令?
int print(){
a=a+1;
}