加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

深入iOS系统底层之程序中的汇编代码

发布时间:2019-05-31 01:35:37 所属栏目:业界 来源:欧阳大哥2013
导读:副标题#e# 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。--(老子道德经 ) 对于一个闭源系统来说如果想研究某些逻辑的内部实现就需要对汇编语言进行掌握和了解、对于某些需要高性能实现的逻辑来说用汇编语言实现可能是最好的选择、对于某些逻辑

系统的特殊寄存器的值输出给高级语言的变量

  1. //打印当前指令的地址以及当前线程ID 
  2. void foo() 
  3.     unsigned long pc = 0; 
  4.     unsigned long threadid = 0; 
  5.       
  6. #if __arm64__ 
  7.       //arm64限制了直接读写PC寄存器的方式,而是改动相对偏移 
  8.       //TPIDRRO_EL0是指内核中的线程ID,用专门的指令mrs来读取 
  9.       __asm__( 
  10.               "adr x0, #0n" 
  11.               "stur x0, %0n" 
  12.               "mrs %1,TPIDRRO_EL0n" 
  13.               :"=m"(pc),"=r"(threadid) 
  14.               ); 
  15.       
  16. #elif __x86_64__ 
  17.     //x86体系的CPU没有专门的寄存器保存线程ID 
  18.     __asm__( 
  19.             "leaq (%%rip), %%rdin" 
  20.             "movq %%rdi, %0n" 
  21.             :"=m"(pc) 
  22.             ); 
  23. #else 
  24.     NSAssert(0, @"oops!"); 
  25. #endif 
  26.       
  27.      
  28.     NSLog(@"pc=%ld, threadid=%ld",pc, threadid); 
  29.       

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读