Files
knowledge-kit/Chapter1 - iOS/1.81.md
2020-02-26 16:12:24 +08:00

59 lines
1.5 KiB
Markdown

# __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 名称,那么我们可以给工程做混淆。
等待深入研究后继续更新...