# __asm__ 重命名符号 > 最近看到 __asm__ ,所以在自己简单实验下,有了本文。 ## 探索 1. 实验1 ```c #import 【爬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](./../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 失败](./../assets/2020-02-25-asm2.png) 可以看到 App 工程主入口函数 `main` 函数,想修改为 `mook_main`。但是报错 `ld: entry point (_main) undefined. fir architecture x86_64` 当把 `main` 函数修改为 `_main` 发现成功。 ## 应用 鉴于 __asm__ 可以修改 symbol 名称,那么我们可以给工程做混淆。 等待深入研究后继续更新... ## 引用 - [Assembler labels](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491f/Cacgegch.html)