- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是 ../sysdeps/x86_64/memcpy.S 中的一行,在这行之后我遇到了 VM 崩溃,所以我需要知道发生了什么。基本上我知道它类似于将 rsi 复制到 rcx。但这是否意味着 rsi 和 rcx 本身应该都是有效地址?因为当我输入“信息寄存器”时,我得到:
rcx 0xfa7e828 262662184
rsi 0x9 9
当我使用“x/s”查看地址中的内容时,我得到:
(gdb) x/s 0x7fb47787e820
0x7fb47787e820: ""
(gdb) x/s 0xfa7e828
0xfa7e828: <Address 0xfa7e828 out of bounds>
(gdb) p $rsi
$2 = 9
(gdb) x/s 0x9
0x9: <Address 0x9 out of bounds>
实际上“0x09”是我想复制到某个地方的值,而不是值的地址。那么是不是因为这行代码将“0x09”当作某个地址,因此出现了以下错误?
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
memcpy () at ../sysdeps/x86_64/memcpy.S:102
102 movq (%rsi), %rcx
如果有帮助,该行的回溯和代码是:
(gdb) bt
#0 memcpy () at ../sysdeps/x86_64/memcpy.S:102
#1 0x00007fb484688f68 in ?? ()
#2 0x00007fb4830399d1 in start_thread (arg=0x7fb464af8700) at pthread_create.c:301
#3 0x00007fb482d86b7d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115
(gdb) l
97
98 L(1c): /* 8-byte once */
99 testb $8, %dl
100 jz L(1d)
101
102 movq (%rsi), %rcx
103 movq %rcx, (%rdi)
104
105 addq $8, %rsi
106 addq $8, %rdi
(gdb)
107
108 .p2align 4,, 4
109
110 L(1d): /* 16-byte loop */
111 andl $0xf0, %edx
112 jz L(exit)
113
114 .p2align 4
115
116 L(1loop):
非常感谢您的宝贵时间。
最佳答案
GDB 为您提供关键信息。源地址 0x9 越界,你告诉 0x9 实际上是要复制的值。因此,您没有向 memcpy 传递有效的源地址,而是传递值。
也许你正在传递一个变量x
而不是它的地址&x
:
...
x = 9;
memcpy(destination_address, x, N); //<-- should be &x
destination_address
也必须考虑同样的问题。如果它是一个变量,则使用 &
运算符取消引用。如果是指针,则按原样传递。
关于linux - movq (%rsi), %rcx 谁能告诉我这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25397638/
我正在读一本书:[xchg rax, rax]。以下是本书的 0x03 片段,我无法理解这一点。 sub rdx,rax sbb rcx,rcx and rcx,rdx
64 位 Windows 似乎使用 rcx = r8 = &PEB 调用 exe 的入口点和 rdx = r9 = &entrypoint好像入口点被声明 entrypoint(PEB *peb, v
我有 30 个未开封的 Lego Mindstorms 套件,我很想在我的编程入门类(class)中使用它们,以便在年底时做一些简单的机器人技术。我们在类里面使用 Python,所以我希望有一种方法可
使用 x86-64 gcc -Og -std=gnu99 -xc 编译。 在.L3的第二行(addl(%rdi,%rcx,4),%eax),为什么不直接使用寄存器% edx 加到和的时候? 添加 (%
我有一个用 MASM64/ML64 组装的 X64 ASM 例程。它是一个独立的叶函数,不是内联汇编。它用于 Visual Studio 解决方案中的 C/C++ 程序。 我在 MSDN 上找到了两个
我有一个用 MASM64/ML64 组装的 X64 ASM 例程。它是一个独立的叶函数,不是内联汇编。它用于 Visual Studio 解决方案中的 C/C++ 程序。 我在 MSDN 上找到了两个
为了在 Linux 系统启动时自动运行程序,我必须修改/etc/rcX.d,在/etc/init.d 中添加一些指向脚本的链接,我有两个问题: 目录名“/etc/rcNum.d”中的数字是什么意思?当
这是 ../sysdeps/x86_64/memcpy.S 中的一行,在这行之后我遇到了 VM 崩溃,所以我需要知道发生了什么。基本上我知道它类似于将 rsi 复制到 rcx。但这是否意味着 rsi
这个问题在这里已经有了答案: Why do x86-64 Linux system calls modify RCX, and what does the value mean? (1 个回答) 关
void UART_init(void){ ANSELB = 0; //set PORT B to digital port TRISBbits.TRISB5 = 1; //s
我有这个函数指针和这段代码: 0x0000555555556e80 : push %rbp 0x0000555555556e81 : mov %rsp,%rbp 0x0000
我有这个函数指针和这段代码: 0x0000555555556e80 : push %rbp 0x0000555555556e81 : mov %rsp,%rbp 0x0000
上下文: Linux 64。 GCC 4.8.2(带 -O3 -march=native) 我左手下的x86_64 abi,在第21页打开。 C代码: int main (int argc, ch
这个问题在这里已经有了答案: Linux x64: why does r10 come before r8 and r9 in syscalls? (2 个答案) 关闭 3 年前。 根据 Syste
我用我的爱好 x86_64 UEFI 内核达到了用户代码调用系统代码的目的,但它会在 0x1B:0x0(0x1B 是用户模式代码段选择器)处生成错误代码 0 的一般保护错误。单步执行,我意识到 SYS
我想我明白 movzbl (%rdi, %rcx, 1) , %ecx 意思是“将零扩展字节移到长”,并表示将 ecx 扩展为 32 位,但我不完全确定语法 (%rdi, %rcx, 1) 指的是什么
我还没有找到解决问题的方法。我想知道的是我如何在 C++ 中做到这一点。 我有一个指向位置 mov rcx, qword ptr [0xAddress] 的地址。然后我需要找到一种方法,仅使用 C++
x64 寄存器是否可以互换,从某种意义上说,使用它们的一种组合的任何指令都可以与其他任何组合一起使用?除了名称之外,是否存在性能差异或任何其他考虑因素使它们彼此不同? 最佳答案 不是。虽然大多数 x8
我正在使用.NetCore 3 和 Swagger 5.0.0-rc4。我正在尝试使用 Swagger 上传文件(图像),但它不起作用,因为 IOperationFilter 甚至 Swashbuck
这个问题已经有答案了: What do the E and R prefixes stand for in the names of Intel 32-bit and 64-bit registers
我是一名优秀的程序员,十分优秀!