昨天在家浏览了纽约大学的一个课件,找到一个例子,很有趣,我稍微修改了一下,支持32位和64位环境:如下。
以后该系列采用这样的模式,首篇只贴代码,续篇进行解释和分析,期间希望读者朋友能自己做实验。
理解该代码就算对rbp,rsp寄存器以及一些调用有了直接的接触。
里面有两个奇怪的数字17和23,这是为什么呢?续篇给予解答。
编译方法:
64位环境:
g++ -g test.cpp -o test_64 //64位代码
g++ -g -m32 test.cpp -o test_32 //32位代码
32位环境:
g++ -g test.cpp -o test_32
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
int done = 0;
int thread1( void )

这篇博客通过一个32位和64位环境兼容的代码示例,展示了如何利用rbp寄存器在信号处理函数中切换线程。在信号`SIGINT`或`SIGALRM`触发时,代码会改变栈帧中的特定位置(32位环境下是17,64位环境下是23),以实现线程间的切换。作者鼓励读者自行实验并解析代码中的17和23这两个数字的含义。
最低0.47元/天 解锁文章
1696





