小编典典

您应该能够使用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中打印程序计数器的确切值相关推荐

  1. c语言中int64类型,stdint - 如何在C中打印int64_t类型

    stdint - 如何在C中打印int64_t类型 C99标准具有整数类型,字节大小类似于int64_t. 我使用以下代码: #include #include int64_t my_int = 99 ...

  2. python打印多个变量名_如何在Python中打印单个和多个变量?

    请考虑下面Python 2.x中的两个Python代码片段.# Code 1 print 1 # Output: 1# Code 2 print(1) # Output: 1 在Python 2.X中 ...

  3. Microsoft Excel 教程「3」:如何在 Excel 中打印工作表?

    欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel 的使用技巧,了解如何在 Excel 中打印工作表. 可打印全部或部分工作表,可一次打印一个,也可一次打印 ...

  4. Microsoft Excel 教程:如何在 Excel 中显示或隐藏零值?

    欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel 的使用技巧,了解如何在 Excel 中显示或隐藏零值. 在 Excel 中有时希望将零值显示为空单元格, ...

  5. access自动编号怎么解除_如何在 Access 中重置“自动编号”字段值

    如何在 Access 中重置"自动编号"字段值 中删除某个表中的一些行或所有行时,"自动编号"字段不会自动重置.要重置"自动编号"字段值并 ...

  6. 如何在Python中打印到stderr?

    有几种写stderr的方法: # Note: this first one does not work in Python 3 print >> sys.stderr, "spa ...

  7. 如何在Python中打印异常?

    try:something here except:print('the whatever error occurred.') 如何在我的except:块中打印错误/异常? #1楼 如果您要传递错误字 ...

  8. scala中打印数组和集合_如何在Scala中打印数组?

    scala中打印数组和集合 Scala中的数组 (Array in Scala) In Scala, Array is a data structure that is a collection of ...

  9. 如何在Excel中打印特定的单元格选择

    Sometimes you want to print only a specific selection of cells on a worksheet. But when you print in ...

最新文章

  1. 如何将RDS的数据同步到本地自建数据库
  2. 我的linkedin profile
  3. leetcode讲解--872. Leaf-Similar Trees
  4. spring 缓存(spring自带Cache)(入门)源码解读
  5. Java开发中的常见危险信号
  6. 前端学习(2708):重读vue电商网站28之通过axios请求拦截器添加 token
  7. nrf51822添加UUID
  8. 中文python笔记_Python学习笔记-基础篇
  9. 转:Nginx 性能优化有这篇就够了!
  10. java微信上传本地视频教程_java微信开发之上传下载多媒体文件,java上传下载_PHP教程...
  11. Visual Studio 2012 实用快捷键
  12. vscode怎样打开终端 使用命令行
  13. IPCamera可以通过BackChannel进行对讲?
  14. 【读书笔记《Bootstrap 实战》】6.单页营销网站
  15. windows系统中误删文件恢复
  16. kettle多表数据迁移
  17. 【ASP.NET Web】项目实践—网上宠物店8:制作“商品展示”页面
  18. 怎么一键多平台发布视频或者文章?
  19. matlab 图像中加入高斯白噪声,MATLAB——如何给图像添加高斯白噪声
  20. 为什么苹果允许「自助修 iPhone」这件事,与每个人息息相关?

热门文章

  1. python跨行字符串 变量_在Python中有没有在多行字符串中使用变量的方法?
  2. 均匀分布取某一点概率_概率和概率分布
  3. 小程序云开发,订阅消息定时批量发送实现代码
  4. 女神推荐, 卡片,广告图 ,点击查看更多
  5. EMQ学习笔记---Clean Session和Retained Message
  6. ulimit -n 修改
  7. Unique Paths II
  8. [K/3Cloud]关于数据库sa密码更改,管理中心登录不上的问题。
  9. NSStream线程阻塞处理
  10. css:z-index