栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

汇编:汇编与C派系语言混用以及对应LLDB常用指令

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

汇编:汇编与C派系语言混用以及对应LLDB常用指令

汇编与C/C++/Objective-C混用,分两种类型:外联汇编、内联汇编。
LLDB的一些常用指令可以协助我们更好的读取分析OC反编译,看懂汇编代码。

1、外联汇编

sum.h 声明:

#ifndef sum_h
#define sum_h

int sum(int a, int b);

#endif 

sum.s 实现:

.global _sum

_sum:
    movq %rdi, %rax
    addq %rsi, %rax
    retq

main.m 调用:

#import 
#import "sum.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"%d", sum(1, 2));
    }
    return 0;
}
2、内联汇编
#import 
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int num1 = 1;
        int num2 = 2;
        int result;
        __asm__(
            "addq %%rbx, %%rax"
            : "=a"(result)
            : "a"(num1), "b"(num2)
        );
        NSLog(@"%d", result);
    }
    return 0;
}
LLDB常用指令

1.1、读取寄存器的值

register read/格式
register read/x

1.2、修改寄存器的值

register write 寄存器名称 数值
register write $rax 0

2.1、读取内存中的值

x/数量-格式-字节大小 内存地址
x/3xw 0x0000010

2.2、修改内存中的值

memory write 内存地址 数值
memory write 0x0000010 10

3.1、格式

x是16进制,f是浮点,d是十进制

3.2、字节大小

b – byte 1字节
h – half word 2字节
w – word 4字节
g – giant word 8字节

4、expression 表达式

可以简写:expr 表达式
expression $rax
expression $rax = 1

5、po 表达式
6、print 表达式

7、po/x r a x 8 、 p o ( i n t ) rax 8、po (int) rax8、po(int)rax

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960660.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号