Articles of x86 64

为什么RCX不用于传递参数给系统调用,被R10取代?

根据System V X86-64 ABI ,应用程序中的函数调用使用以下顺序的寄存器来传递整型参数: rdi, rsi, rdx, rcx, r8, r9 但是系统调用参数(除了系统调用号)在另一个寄存器序列中传递: rdi, rsi, rdx, r10, r8, r9 为什么内核使用r10而不是rcx作为第四个参数? 这与r10是不是被保留的事实有什么关系?

Linux x86_64上的Cassandra启动错误1.2.6

试图从最新的稳定版本在Linux上安装cassandra – http://cassandra.apache.org/download/ – 1.2.6 我已经修改了cassndra.yaml指向一个自定义目录而不是/ var,因为我没有/ var的写权限 我在启动时看到这个错误。 由于发布版似乎相对较新,因此无法在Google上find任何答案。 只是在这里张贴,以防万一我的一个愚蠢的错误。 相同的分配文件在我的macos x86_64机器上正常工作。 INFO 19:24:35,513 Not using multi-threaded compaction java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:322) at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:229) at org.xerial.snappy.Snappy.<clinit>(Snappy.java:48) at org.apache.cassandra.io.compress.SnappyCompressor.create(SnappyCompressor.java:45) at org.apache.cassandra.io.compress.SnappyCompressor.isAvailable(SnappyCompressor.java:55) at org.apache.cassandra.io.compress.SnappyCompressor.<clinit>(SnappyCompressor.java:37) at org.apache.cassandra.config.CFMetaData.<clinit>(CFMetaData.java:82) at org.apache.cassandra.config.KSMetaData.systemKeyspace(KSMetaData.java:81) at org.apache.cassandra.config.DatabaseDescriptor.loadYaml(DatabaseDescriptor.java:468) at org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:123) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:211) at […]

X86 64位汇编Linux'Hello World'连接问题

我试图跟进这个线程 ,不幸的是不能解决我的问题。 我试图运行的代码如下所示: ; File hello.asm section .data msg: db "Hello World!",0x0a,0 section .text global main extern printf main: push rbp mov rbp, rsp lea rdi, [msg] ; parameter 1 for printf xor eax, eax ; 0 floating point parameter call printf xor eax, eax ; returns 0 pop rbp ret 我的系统是debian stretch: $ uname […]

amd64 psABI在哪里?

AMD64 psABI曾经被x86-64.org托pipe。 我有一个pdf文件的副本,它明确地说: 体系结构规范可在网站http://www.x86-64.org/documentation上find 。 但http://www.x86-64.org已经很长一段时间了。 至less几个月。 有谁知道最新的PSABI可以从哪里拿走?

如何构buildnetty-transport-native-epoll-4.0.32.Final-linux-x86_64.jar?

我在netty中使用本地epoll传输,并能够从存储库下载netty-transport-native-epoll-4.0.32.jar。 但是我也需要netty-transport-native-epoll-4.0.32.Final-linux-x86_64.jar,但是无法在任何地方find它。 请让我知道在哪里下载这个jar,或者如何构build它。

Linux X86-64汇编和printf

我正在阅读一些Linux程序集手册,并发现使用printf()函数的想法。 我需要它为了debugging的原因以二进制forms输出寄存器值到terminal,但现在我试图简单地用文本来testing该function。 我卡住了,因为segfault,当我使用pushq而不是pushl。 我怎样才能改变这个程序输出string和二进制forms的寄存器? .data input_prompt: .string "Hello, world!" printf_format: .string "%5d " printf_newline: .string "\n" size: .long 0 .text .globl main main: pushq $input_prompt call printf movl $0, %eax ret 它由GCC编译为: gcc tmp.S -o tmp

在x86_64 Linux中重新部署一个2GB以上的程序的链接器错误?

我有一个用户程序,通常编译有一个入口点在0x400460 ,我不得不重新定位入口点在2GB的Linux内加载的共享库开始。 例如linux-vdso.so.1 => (0x00007fff109cd000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcd195e6000) /lib64/ld-linux-x86-64.so.2 (0x00007fcd199af000) 我正在使用gcc命令行参数-Wl,-Ttext=0x80000000来指定.text segemnt的开始地址。 问题是,当我给这个参数超过2GB的地址时,我得到一个链接器错误是: gcc test.c -ggdb -Wl,-Ttext=0x80000000 -o test1 /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 10 /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 11 /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2 /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index […]

命令用.a文件编译c文件

我有几个.c文件和一个.a目标文件。 我应该使用什么命令与gcc编译到一个exe文件? 如果我们使用makefile,它将如何?

如何在CentOS Linux上检查GPU

build议在Linux上用命令lspci | grep VGAfindGPU lspci | grep VGA 。 它在Ubuntu上工作正常,但是当我尝试在CentOS上使用它时,它说lspci命令没有find。 我怎样才能在CentOS上查看GPU卡。 请注意,我不是机器的pipe理员,我只能从命令行远程使用它。 我打算使用GPU作为该机器上的GPGPU,但首先我需要检查它是否有一个。

我不明白为什么编译器给我错误的代码

我有以下C代码,这对我来说看起来非常正确。 但是,clang编译器(实际上gcc或任何其他C编译器)则认为不然。 typedef struct { struct timeval td_start; struct timeval td_end; } Timer; void startTimer( struct Timer* ptimer ) { gettimeofday( &(ptimer->td_start), NULL ); } void stopTimer( struct Timer* ptimer ) { gettimeofday( &(ptimer->td_end), NULL ); } 编译器给出以下waring&error消息。 任何想法这里有什么不对? ./timing.h:14:25: warning: declaration of 'struct Timer' will not be visible outside of this function [-Wvisibility] void […]