指针、MachO文件
指针
- 指针自增、自减的结果,其实就是指针指向的数据类型宽度决定的!
- 指针加上或减去一个整数的结果,其实就是指针指向的数据类型宽度决定的!
- 指针求差,得到的结果是整形,其结果和指针指向的数据类型宽度有关!
- 这也就是指针的特点! 它的运算单位 是数据类型的宽度!
逆向原理
动态调试 通过界面调试Cycript\Xcode LLDB! 静态分析 利用我们之前学习的汇编代码,分析三方APP的源码! 代码注入 注入的其实是动态库!HOOK代码 改变原来程序的执行流程! 重签名 安装在非越狱手机上面
class-dump
$ class-dump -H MachO文件Path -o 头文件路径
MachO文件
官方介绍总共有11种格式! 是 Mach Object的缩写,是Mac\iOS 上用于存储程序,库的标准格式! 常见的格式:
- 1.可执行文件
- 2.objcet
- .o 文件(目标文件)
- .a 静态库文件.其实就是N个.o文件的集合
- 3.DYLIB: 动态库文件
- dylib
- framework
- 4.动态连接器
- 5.DSYM
动态库共享缓存
为了提高性能,系统的动态库文件都存在了动态库共享缓存里面!
动态加载器(dyld)
- dynamic linker
- dynamic loadel
拆分二进制文件
经常用于整合静态库
瘦身
$ lipo 002--可执行文件 -thin armv7 -output macho_armv7
$ lipo 002--可执行文件 -thin armv64 -output macho_armv64
整合
$ lipo -create macho_armv7 macho_arm64 -output machO_v7_64
题外话
/bin,/sbin,/usr/sbin,/usr/bin 目录之简单区别 博客分类: Ubuntu / Mac / Github / Aptana / Nginx / Shell / Linux
/bin,/sbin,/usr/sbin,/usr/bin 目录
这些目录都是存放命令的。
首先区别下/sbin和/bin:
从命令功能来看,/sbin 下的命令属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统,/bin下存放一些普通的基本命令,如ls,chmod等,这些命令在Linux系统里的配置文件脚本里经常用到。
从用户权限的角度看,/sbin目录下的命令通常只有管理员才可以运行,/bin下的命令管理员和一般的用户都可以使用。
从可运行时间角度看,/sbin,/bin能够在挂载其他文件系统前就可以使用。
而/usr/bin,/usr/sbin与/sbin /bin目录的区别在于:
/bin,/sbin目录是在系统启动后挂载到根文件系统中的,所以/sbin,/bin目录必须和根文件系统在同一分区;
/usr/bin,usr/sbin可以和根文件系统不在一个分区。
/usr/sbin存放的一些非必须的系统命令;/usr/bin存放一些用户命令,如led(控制LED灯的)。
转下一位网友的解读,个人认为诠释得很到位: /bin是系统的一些指令。bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。 /sbin一般是指超级用户指令。主 要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、 ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、 rmmod、 runlevel、shutdown等。 /usr/bin 是你在后期安装的一些软件的运行脚本。主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、 eject、elm、free、gnome、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、 man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb、wget等。
/usr/sbin 放置一些用户安装的系统管理的必备程式例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。
如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么
首先就要考虑root 的$PATH里是否已经包含了这些环境变量。
可以查看PATH,如果是:PATH=$PATH:$HOME/bin则需要添加成如下:
PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin