小编Zil*_*g80的帖子

如何通过Linux内核中的c指针覆盖x86`movq`指令的操作数值

目前我已经pageA在 linux 内核的一页上使用汇编编写了一个代码段。代码是

SYM_CODE_START(sr_function)
    movq $0, %rdx
    movq $0x7ffff7fc6000, %rsi 
    movq $0x19016bc83000, %rcx
    movq $9, %rdx
    movq $0, %rdx
    jmp goto_fce_func
SYM_CODE_END(sr_function)
Run Code Online (Sandbox Code Playgroud)

在运行时,我想mov通过 c 指针覆盖指令的第一个操作数,例如,我pageA使用kmap(pageA).

这意味着,现在第一条指令movq $0, %rdx具有地址,例如0x1000

我想用C指针指向?

  1. 将第一个操作数从值0更改0x19016bc83000为第一个mov instruction movq $0, %rdx

  2. 将第一个操作数从 value0x7ffff7fc6000更改0x19016bc74000为第二个mov instruction movq $0x7ffff7fc6000, %rsi

  3. 将第一个操作数从 value0x19016bc83000更改0为第三个mov instruction movq $0x19016bc83000, %rcx

你知道我怎么能这样做吗?

使用objdump -D显示反汇编此代码段

0000000000001000 <sr_function>: …
Run Code Online (Sandbox Code Playgroud)

c linux kernel linux-device-driver linux-kernel

3
推荐指数
1
解决办法
79
查看次数

标签 统计

c ×1

kernel ×1

linux ×1

linux-device-driver ×1

linux-kernel ×1