iOS 开发 Objective-C

iOS 底层 day 11 Mach-O 结构 ASLR 各种

2020-08-03  本文已影响0人  望穿秋水小作坊

一、Mach-O 的一些词汇了解

  1. VM Address
  1. VM Size
  1. File Offset
  1. File Size

二、回顾一下 Mach-O 文件的结构图

Mach-O 结构 对应的 Mach-OView 结构图

如果 Mach-O 文件被执行,在内存中的情况呢?


Mach-O 被载入 RAM64 的内存中,并且不考虑 ASLR

三、ASLR

  1. ASLR 是什么?
Mach-O 被载入 RAM64 的内存中,有 ASLR

四、基于以上知识,我们来验证一些问题。

  1. Hopper Disassembler 工具中显示的函数地址值的含义到底是什么?
Hopper Disassembler 分析图 -[ViewController tableView:didSelectRowAtIndexPath:]: 函数地址
(lldb) image list
[  0] 1396569F-D0D0-3300-8A91-C28EA9F62DF2 0x0000000100f48000 /var/containers/Bundle/Application/2227BC81-41C9-4B49-A3A9-4C23FFC2A0D1/Demo.app/Demo (0x0000000100f48000)
[  1] 9C893B6A-A3B1-3D95-9632-6EF6952E7195 0x0000000101254000 /Library/Caches/cy-jCNXTu.dylib (0x0000000101254000)
[  2] E668256B-2890-35A6-8F6C-413E5129F8AB 0x0000000100f98000 /Library/MobileSubstrate/MobileSubstrate.dylib (0x0000000100f98000)

(lldb) breakpoint set -a 0x100F4CDD0
Breakpoint 2: where = Demo`-[ViewController tableView:didSelectRowAtIndexPath:] at ViewController.m:120, address = 0x0000000100f4cdd0
  1. 如何证明全局变量是在 _Data 段。
(lldb) p &a
(int *) $0 = 0x0000000100996020
(lldb) p &b
(int *) $1 = 0x0000000100996024
(lldb) p &c
(int *) $2 = 0x0000000100996028
(lldb) image list -o -f | grep Demo
[  0] 0x000000000098c000 /Users/carrot__lsp/Library/Developer/Xcode/DerivedData/Demo-azxmdanoosovrnaycaajglqvzbko/Build/Products/Debug-iphoneos/Demo.app/Demo

上一篇 下一篇

猜你喜欢

热点阅读