linux程序计数器,如何在C中打印程序计数器的确切值
小编典典
您应该能够使用ARM编译器工具链中的__current_pc()内在函数来确定PC
(ARM编译器支持许多与GCC相同的扩展)。*这是ARM特有的:
int main () {
printf("%#x\n", __current_pc());
printf("%#x\n", __current_pc());
printf("%#x\n", __current_pc());
return 0;
}
*感谢FrankH。指出存在__current_pc()
通常,PC在函数调用中被保存为返回地址。在具有GCC的非ARM linux系统上,您可以调用__builtin_return_address(0)以获取当前函数调用上下文的返回地址。以这种方式获得程序计数器会增加添加函数调用的代价,但是避免了内联汇编,因此该技术可移植到GCC支持的任何系统中。
void * get_pc () { return __builtin_return_address(0); }
int main () {
printf("%p\n", get_pc());
printf("%p\n", get_pc());
printf("%p\n", get_pc());
return 0;
}
当我在x86系统上运行上述程序时,它将产生输出:
0x8048432
0x8048447
0x804845c
在拆卸时gdb:
Dump of assembler code for function main:
0x08048424 : push %ebp
0x08048425 : mov %esp,%ebp
0x08048427 : and $0xfffffff0,%esp
0x0804842a : sub $0x10,%esp
0x0804842d : call 0x804841c
0x08048432 : mov %eax,0x4(%esp)
0x08048436 : movl $0x8048510,(%esp)
0x0804843d : call 0x80482f0
0x08048442 : call 0x804841c
0x08048447 : mov %eax,0x4(%esp)
0x0804844b : movl $0x8048510,(%esp)
0x08048452 : call 0x80482f0
0x08048457 : call 0x804841c
0x0804845c : mov %eax,0x4(%esp)
0x08048460 : movl $0x8048510,(%esp)
0x08048467 : call 0x80482f0
0x0804846c : mov $0x0,%eax
0x08048471 : leave
0x08048472 : ret
End of assembler dump.
2020-06-03
linux程序计数器,如何在C中打印程序计数器的确切值相关推荐
- c语言中int64类型,stdint - 如何在C中打印int64_t类型
stdint - 如何在C中打印int64_t类型 C99标准具有整数类型,字节大小类似于int64_t. 我使用以下代码: #include #include int64_t my_int = 99 ...
- python打印多个变量名_如何在Python中打印单个和多个变量?
请考虑下面Python 2.x中的两个Python代码片段.# Code 1 print 1 # Output: 1# Code 2 print(1) # Output: 1 在Python 2.X中 ...
- Microsoft Excel 教程「3」:如何在 Excel 中打印工作表?
欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel 的使用技巧,了解如何在 Excel 中打印工作表. 可打印全部或部分工作表,可一次打印一个,也可一次打印 ...
- Microsoft Excel 教程:如何在 Excel 中显示或隐藏零值?
欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel 的使用技巧,了解如何在 Excel 中显示或隐藏零值. 在 Excel 中有时希望将零值显示为空单元格, ...
- access自动编号怎么解除_如何在 Access 中重置“自动编号”字段值
如何在 Access 中重置"自动编号"字段值 中删除某个表中的一些行或所有行时,"自动编号"字段不会自动重置.要重置"自动编号"字段值并 ...
- 如何在Python中打印到stderr?
有几种写stderr的方法: # Note: this first one does not work in Python 3 print >> sys.stderr, "spa ...
- 如何在Python中打印异常?
try:something here except:print('the whatever error occurred.') 如何在我的except:块中打印错误/异常? #1楼 如果您要传递错误字 ...
- scala中打印数组和集合_如何在Scala中打印数组?
scala中打印数组和集合 Scala中的数组 (Array in Scala) In Scala, Array is a data structure that is a collection of ...
- 如何在Excel中打印特定的单元格选择
Sometimes you want to print only a specific selection of cells on a worksheet. But when you print in ...
最新文章
- 如何将RDS的数据同步到本地自建数据库
- 我的linkedin profile
- leetcode讲解--872. Leaf-Similar Trees
- spring 缓存(spring自带Cache)(入门)源码解读
- Java开发中的常见危险信号
- 前端学习(2708):重读vue电商网站28之通过axios请求拦截器添加 token
- nrf51822添加UUID
- 中文python笔记_Python学习笔记-基础篇
- 转:Nginx 性能优化有这篇就够了!
- java微信上传本地视频教程_java微信开发之上传下载多媒体文件,java上传下载_PHP教程...
- Visual Studio 2012 实用快捷键
- vscode怎样打开终端 使用命令行
- IPCamera可以通过BackChannel进行对讲?
- 【读书笔记《Bootstrap 实战》】6.单页营销网站
- windows系统中误删文件恢复
- kettle多表数据迁移
- 【ASP.NET Web】项目实践—网上宠物店8:制作“商品展示”页面
- 怎么一键多平台发布视频或者文章?
- matlab 图像中加入高斯白噪声,MATLAB——如何给图像添加高斯白噪声
- 为什么苹果允许「自助修 iPhone」这件事,与每个人息息相关?