小编ion*_*des的帖子

如何在 x64 asm 中通过相对于 RIP 的跳转准确跳过 1 条指令?

我试图在不使用标签的情况下完全跳过 1 条指令,带有标签的示例是:

cmp r12, r13
je dest ; skip the jmp
jmp whatever
dest:
nop
Run Code Online (Sandbox Code Playgroud)

但是,我的限制是我不能使用标签,所以我假设我必须创建一个相对于 RIP 寄存器的跳转。例如(伪):

cmp r12, r13
je rip+0x05 ; this would obviously depend on the length of the next instruction
jmp whatever
nop
Run Code Online (Sandbox Code Playgroud)

但是,我缺乏生产任何工作的知识,据我所知,没有黑客是不可能读/写 RIP 寄存器的。

编辑:我只熟悉英特尔语法,我使用 Keystone 作为汇编程序。我将从程序集中获取字节并将其加载到可执行内存位置。我正在使用我自己的网站从程序集中获取字节,如果您查看,您可能会明白。

编辑 2:我尝试了 Jesters 和 Margaret Blooms 的评论,建议使用:

je .+0x05
; or
je $+0x05
Run Code Online (Sandbox Code Playgroud)

但是,我可以确认两者都不适用于 Keystone!幸运的是,我注意到 Keystone 能够处理以下代码:

je +0x05
Run Code Online (Sandbox Code Playgroud)

有没有人能够确认这有效?

编辑 3:我用 NASM 试了一下,$ 前缀在我测试过的代码中工作正常。我用它来测试它:

section .text       
global _WinMain@16       

_WinMain@16: …
Run Code Online (Sandbox Code Playgroud)

64-bit assembly intel

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

QML 标签最大宽度和多行

我有一个标签,但它应该只和表格一样长。如果标签较长,则应从新行开始。我怎么能意识到这一点?我正在使用 QtQuick Controls 2.0

我当前的标签代码:

Label {
    id: lblMsg
    width: ApplicationWindow.width - 10 // not working
    text: "ajksdlldjklasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd"
    x: 20
    y: 20
}
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qtquickcontrols2

1
推荐指数
2
解决办法
6505
查看次数

标签 统计

64-bit ×1

assembly ×1

c++ ×1

intel ×1

qml ×1

qt ×1

qtquickcontrols2 ×1