docs: iOS 使用 __asm__ 重命名 symbol

This commit is contained in:
杭城小刘
2020-02-26 16:12:24 +08:00
parent 0afc7b01c4
commit b8f4d76d3a
2 changed files with 62 additions and 1 deletions

59
Chapter1 - iOS/1.81.md Normal file
View File

@@ -0,0 +1,59 @@
# __asm__ 重命名符号
> 最近看到 __asm__ ,所以在自己简单实验下,有了本文。
## 探索
1. 实验1
```c
#import <Foundation/Foundation.h>【爬sw
int age __asm__("objc_age") = 25;
void foo(void) __asm__("@杭城小刘");
void foo (void) {
printf("Hello world\n");
}
int main(int argc, const char * argv[]) {
foo();
return 0;
}
```
在 foo 方法里面下断点,见下图
![rename symbol](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/2020-02-25-asm.png)
可以看到,`foo` 方法的 symbol 被变为 `@杭城小刘`,变量 `age` 被变为 `objc_age`
2. 实验2
```objective-c
#import "AppDelegate.h"
int main(int argc, char * argv[]) __asm__("mook_main");
int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {
// Setup code that might create autoreleased objects goes here.
appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}
```
![App main 方法 rename 失败](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/2020-02-25-asm2.png)
可以看到 App 工程主入口函数 `main` 函数,想修改为 `mook_main`。但是报错 `ld: entry point (_main) undefined. fir architecture x86_64`
当把 `main` 函数修改为 `_main` 发现成功。
## 应用
鉴于 __asm__ 可以修改 symbol 名称,那么我们可以给工程做混淆。
等待深入研究后继续更新...

View File

@@ -83,4 +83,6 @@
* [77、iOS 打包系统构建加速](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.77.md) * [77、iOS 打包系统构建加速](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.77.md)
* [78、上架包预检](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.78.md) * [78、上架包预检](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.78.md)
* [79、深入理解各种锁](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.79.md) * [79、深入理解各种锁](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.79.md)
* [80、打造功能强大的数据上报组件](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.80.md) * [80、打造功能强大的数据上报组件](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.80.md)
* [81、__asm__ 重命名符号](https://github.com/FantasticLBP/knowledge-kit/blob/master/Chapter1%20-%20iOS/1.81.md)