GG修改器破解版下载地址:https://ghb2023zs.bj.bcebos.com/gg/xgq/ggxgq?GGXGQ
大家好,今天小编为大家分享关于gg修改器游戏代码_gg修改器最新版的内容,赶快来一起来看看吧。
如果你是一个嵌入式开发人员,或者是Linux内核研发人员。可能经常会在内核中遇见如下代码:
/*
* CPU interrupt mask handling.
*/
static inline unsigned long arch_local_irq_save(void)
{
unsigned long flags;
asm volatile(
"mrs %0, daif // arch_local_irq_save
"
"msr daifset, #2"
: "=r" (flags)
:
: "memory");
return flags;
}
以上代码是ARM架构屏蔽中断的实现。
嵌入式进阶教程分门别类整理好了,看的时候十分方便,由于内容较多,这里就截取一部分图吧。
需要的朋友私信【内核】即可领取。
内核学习地址:
再比如还会遇到这样的代码:
#define ATOMIC_OP(op, asm_op)
static inline void atomic_##op(int i, atomic_t *v)
{
unsigned long tmp;
int result;
asm volatile("// atomic_" #op "
"
"1: ldxr %w0, %2
"
" " #asm_op " %w0, %w0, %w3
"
" stxr %w1, %w0, %2
"
" cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i));
}
上述的代码是ARM架构原子操作OP的代码实现。
有的人对这种C原因中嵌入汇编不是很熟悉,也不是很了解。今天就带大家了解了解。
Linux内核绝大部分代码是用C语言写的,而只有一小部分代码是使用内嵌汇编写的。这部分代码大多是和特定体系结构相关的代码和对性能影响很大的代码。GCC提供了内嵌汇编的功能,可以在C代码中直接内嵌汇编语言语句,大大方便了程序设计。
内嵌汇编语法如下:
__asm__( 汇编语句模板:
输出部分:
输入部分:
破坏描述部分)
共四个部分:汇编语句模板,输出部分,输入部分,破坏描述部分,各部分使用“:”格开,汇编语句模板必不可少,其他三部分可选,如果使用了后面的部分,而前面部分为空,也需要用“:”格开,相应部分内容为空。比如:
asm("msr daifclr, #1" : : : "memory")
一般大家见到的样子是这样的:
asm volatile(
"msr daif, %0 // 汇编语句模板
: // 输出部分
: "r" (flags) // 输入部分
: "memory"); // 破坏描述部分
“asm”表示后面的代码为内嵌汇编,“asm”是“asm”的别名。 “volatile”表示编译器不要优化代码,后面的指令保留原样, “volatile”是它的别名。
汇编语句模板由汇编语句序列组成,语句之间使用“;”、“
”或“
”分开。 指令中的操作数可以使用占位符引用C语言变量,操作数占位符最多10个,名称如下:%0,%1…,%9。
举例说明:
#define ATOMIC_OP(op, asm_op)
static inline void atomic_##op(int i, atomic_t *v)
{
asm volatile("// atomic_" #op "
"
"1: ldxr %w0, %2
"
" " #asm_op " %w0, %w0, %w3
"
" stxr %w1, %w0, %2
"
" cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i));
}
可以看到汇编语句模板有4行,每条汇编都是使用“
“来分开。指令中的操作数%w0就代表从输出部分第一个数起。比如%w0代表“ =&r (result)“, %w1代表“=&r (tmp)“依次类推。最多到%9
输出部分描述输出操作数,不同的操作数描述符之间用逗号格开,每个操作数描述符由限定字符串和C语言变量组成。每个输出操作数的限定字符串必须包含“=”表示他是一个输出操作数。
输入部分描述输入操作数,不同的操作数描述符之间使用逗号格开,每个操作数描述符由限定字符串和C语言表达式或者C语言变量组成
为何要有破坏描述部分?我们的c代码是gcc来处理的,当遇到嵌入汇编代码的时候,gcc会将这些嵌入式汇编的文本送给gas进行后续处理。这样,gcc需要了解嵌入汇编代码对寄存器的修改情况,否则有可能会造成大麻烦。例如:gcc对c代码进行处理,将某些变量值保存在寄存器中,如果嵌入汇编修改了该寄存器的值,又没有通知gcc的话,那么,gcc会以为寄存器中仍然保存了之前的变量值,因此不会重新加载该变量到寄存器,而是直接使用这个被嵌入式汇编修改的寄存器。这时候,我们唯一能做的就是静静的等待程序的崩溃。
其中常见的就是内存修改通知: 如果一个内联汇编语句的指令列表中的指令对内存进行了修改,或者在此内联汇编出现的地方,内存内容可能发生改变,而被改变的内存地址你没有在其Output操作表达式中使用”m”约束,这种情况下,你需要使用在破坏描述部分使用字符串”memory”向GCC声明:”在这里,内存发生了,或可能发生了改变”;
举例:
asm("msr daifclr, #8" : : : "memory")
以下是常见的限定字符
r: 表示使用一个通用寄存器,由GCC在%eax/%ax/%al、%ebx/%bx/%bl、%ecx/%cx/%cl、%edx/%dx/%dl中选取一个GCC认为是合适的;
q: 表示使用一个通用寄存器,与r的意义相同;
m: 表示使用内存地址,使用系统支持的任何一种内存方式,不需要借助于寄存器
i: 表示使用一个整数类型的立即数;
F: 表示使用一个浮点类型的立即数;
+: 表示当前输出表达式的属性为可读可写;
=: 当前输出表达式的属性为只写;
&: GCC声明:"GCC不得为任何Input操作表达式分配与此Output操作表达式相同的寄存器;
...
就使用ATOMIC_OPS(add, add)代码举例说明。
ATOMIC_OPS(add, add)
-----------------------
#define ATOMIC_OP(op, asm_op)
static inline void atomic_##op(int i, atomic_t *v)
{
unsigned long tmp;
int result;
asm volatile("// atomic_" #op "
"
"1: ldxr %w0, %2
"
" " #asm_op " %w0, %w0, %w3
"
" stxr %w1, %w0, %2
"
" cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i));
}
---------------------------------------
将宏展开后
-----------------------------------------
static inline void atomic_add(int i, atomic_t *v)
{
unsigned long tmp;
int result;
asm volatile("// atomic_add
"
"1: ldxr %w0, %2
"
" add %w0, %w0, %w3
"
" stxr %w1, %w0, %2
"
" cbnz %w1, 1b"
: "=&r" (result), "=&r" (tmp), "+Q" (v->counter)
: "Ir" (i));
}
接下来一句一句解释:
"1: ldxr %w0, %2
"
ldxr: Load exclusive register (专用的装载寄存器) 简单来说,这句话就将v->counter放入到一个通用的寄存器中。
add %w0, %w0, %w3
"
将通用寄存器中的值+1, 然后在将返回值存放到通用寄存器中。
stxr %w1, %w0, %2
"
stxr : Store exclusive register, returning status 将通用寄存器的值放回到v->counter中,同时将返回结果放入到tmp中
cbnz %w1, 1b"
判断返回值是否设置成功,如果设置失败再次跳转到标号1继续执行上述操作。
原文地址:https://cloud./developer/article/1995963(版本归原作者所有,侵权删除)
以上就是关于gg修改器游戏代码_gg修改器最新版的全部内容,希望对大家有帮助。
gg修改器免root框架使用_GG修改器免ROOT框架安装教程 大小:17.61MB6,862人安装 大家好,今天小编为大家分享关于gg修改器免root框架使用_GG修改器免ROOT框架安装教……
下载GG修改器免root游戏,GG修改器免root游戏:改变你的游戏体验 大小:10.58MB5,729人安装 现在,越来越多的游戏都需要root权限才能使用修改器,这给很多玩家带来了很大的不便……
下载gg修改器怎么变成中文版_gg修改器怎么调中文 大小:16.10MB6,979人安装 大家好,今天小编为大家分享关于gg修改器怎么变成中文版_gg修改器怎么调中文的内容……
下载gg修改器怎样root授权,授权GG修改器,轻松root你的设备 大小:19.97MB5,808人安装 随着手机市场的不断升级,越来越多的手机操作系统出现了,例如安卓系统,iOS系统等……
下载gg游戏修改器原神,为什么gg游戏修改器能让原神更加令人着迷? 大小:19.47MB5,809人安装 原神作为一款新兴的开放世界游戏,受到了众多玩家的追捧。而作为一个高度自由的游戏……
下载gg修改器没root权限作用_如果没有root权限怎么使用gg修改器 大小:19.27MB6,764人安装 大家好,今天小编为大家分享关于gg修改器没root权限作用_如果没有root权限怎么使用g……
下载gg游戏修改器造梦西游,GG游戏修改器让你在造梦西游中轻松称王 大小:12.46MB5,796人安装 在众多游戏中,《造梦西游》不可谓不经典。无论是场景的细节还是人物造型,都展现了……
下载gg修改器免root无广告下载,GG修改器免root版 大小:3.75MB7,039人安装 生活,匀速的是爱,不匀速则变成一种伤害。 大家好,今天小编为大家分享关于gg修改……
下载gg修改器最新vip下载,GG修改器最新VIP下载 – 让游戏更好玩 大小:10.43MB5,870人安装 GG修改器是一款适用于众多游戏的修改工具,可以帮助玩家增加游戏金币、经验、财富等……
下载怎么用gg游戏修改器修改血量,如何体验更佳的游戏乐趣?使用gg游戏修改器修改血量! 大小:14.43MB5,937人安装 当我们在进行游戏时,有没有遇到过几次被BOSS秒杀的尴尬境地?或是担心自己的角色不……
下载