//
//  main.m
//  debug
//
//  Created by piao on 15/7/20.
//  Copyright (c) 2015年 piao. All rights reserved.
//

#import <Foundation/Foundation.h>

__attribute__((naked)) uint64_t getRbp()
{
    __asm__("mov %rbp, %rax\n\n\r"
            "ret");
}

// 嘿嘿,shellcode经常用到滴...
__attribute__((naked)) uint64_t getRip()
{
    __asm__("call 0f\n\n\r"
            "0:pop %rax\n\n\r"
            //"sub $5, %rax\n\n\r"   // 减去指令长度
            "ret");
}

__attribute__((naked)) uint64_t getRsp()
{
    __asm__("mov %rsp, %rax\n\n\r"
            "ret");
}

void piaoyun(){

    NSLog(@"[++++]一层返回 = %llx", getRip() - 5);
    NSLog(@"[++++]二层返回 = %llx", *(uint64_t *)(getRbp() + 0x8));
    
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        piaoyun();
    }
    return 0;
}


你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。