标签 x86-64 下的文章

  • 📂x86_64 Linux 3.0:无效的内存地址教程

    x86\_64体系结构上的Linux 3.0上的进程具有64位虚拟地址空间.很明显,在该地址空间中,保证0是无效的内存地址[请参见下面的定义],因为该地址用于指示NULL指针.保证哪些其他64位数字(如果有)永远都不是有效的内存地址,为什么?例如,1可以是有效地址吗?那2 ^ 64-1呢?定义:您是什么意思“保证是无效的内存地址”?void deref_and_assign(uint64_t...

  • 📂linux-通过ASM代码处理syscall教程

    我正在用此代码块替换/挂钩\_\_NR\_read sysall(该代码块已编译并作为操作码保存在内核模块的可执行内存中)push rbp; mov rbp, rsp; sub rsp, 64; //8 bytes for rax content + 48 bytes for 6 args + 8 bytes for syscall result mov [rsp], rax; mov [...

  • 📂内核如何知道物理页面由两个不同的进程共享?教程

    我们知道页面表用于从虚拟内存页面地址获取物理内存页面地址.但是,内核如何知道物理内存页是否由不同的进程共享(例如在分叉进程及其父进程的情况下).这样的清单保存在哪里?解决方法:内核是创建所有虚拟映射的实体.因此,它确切地知道什么是共享的,什么不是共享的.没有内核的帮助,用户空间进程将无法创建共享映射.当进程请求派生时,内核还负责复制映射.它具有所需的所有信息.页面具有的映射数保留在表示该页面...

  • 📂linux-位置独立代码中的Access .data部分教程

    我正在与NASM建立共享库.在该库中的某些函数中,我需要在C中称为静态变量的东西.基本上,我认为它在.data节中有一些空间: SECTION .data last_tok: dq 0 ; Define a QWORD 当我尝试在函数中访问last\_tok时,就会出现问题.我读了NASM Manual: 8.2 Writing Linux/ELF Shared Libra...

  • 📂linux-可以更改发生哪个核心计时器中断的情况吗?教程

    在我的Debian 8系统上,当我运行命令watch -n0.1 –no-title cat / proc / interrupts时,得到以下输出. CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 ...

  • 📂linux-使用“ push”或“ sub” x86指令时如何分配堆栈内存?教程

    我浏览了一段时间,试图例如在执行操作时了解如何将内存分配给堆栈:push rax 或者移动堆栈指针为子例程的局部变量分配空间:sub rsp, X ;Move stack pointer down by X bytes 我了解的是堆栈段在虚拟内存空间中是匿名的,即不是文件支持的.我还了解的是,内核不会真正将匿名虚拟内存段映射到物理内存,直到程序实际对该内存段执行某些操作(即写入数据)...

  • 📂linux-sys_brk的资格要求是什么教程

    我正在使用sys\_brk syscall在堆中动态分配内存.我注意到在获取当前的休息位置时,我通常会获得类似于以下内容的值:mov rax, 0x0C mov rdi, 0x00 syscall 结果是rax 0x401000 该值通常对齐512个字节.因此,我想问一下中断值是否有对齐要求?还是我们可以按照自己的方式调整它的位置?解决方法:内核确实以字节粒度跟踪中断.但是,如果您完全关...

  • 📂为什么这个movq指令适用于linux而不是osx?教程

    以下汇编代码在OSX 10.9.4上运行时出错,但在Linux上运行成功(Debian 7.6).特别是,movq指令似乎不喜欢label参数.$cat test.S .globl _main _main: movq $_main, %rax ret 这是错误:$as -o test.o test.S test.S:3:32-bit absolute addressing ...

  • 📂linux – 为什么RCX不用于将参数传递给系统调用,而是用R10替换?教程

    参见英文答案 > Linux x64: why does r10 come before r8 and r9 in syscalls? 2个 根据System V X86-64 ABI,应用程序中的函数调用使用以下寄存器序列来传递整数参数:rdi, rsi, rdx, rcx, r8, r9 但是系统调用参数(除了系统调用号)在另一个寄存器序列中传递:rdi, rsi, rdx, r...

  • 📂linux – 为什么这段代码会因地址随机化而崩溃?教程

    我正在学习amd64汇编程序,并试图实现一个简单的Unix过滤器.由于未知原因,即使简化为最低版本(下面的代码),它也会随机崩溃.我试图在GNU Debugger(gdb)中调试这个程序.在gdb的默认配置中,程序运行正常,但如果我启用地址随机化(设置禁用 – 随机化关闭),程序将开始崩溃(SIGSEGV).有问题的指令在清单中标出:format ELF64 executable sys_...

  • 📂linux – 如何在内联汇编中通过sysenter调用系统调用?教程

    我们如何在x86 Linux中直接使用sysenter / syscall实现系统调用?有人可以提供帮助吗?如果您还可以显示amd64平台的代码,那就更好了.我知道在x86中,我们可以使用__asm__( " movl $1, %eax \n" " movl $0, %ebx \n" "...

  • 📂使用AT&T语法将整数打印为字符串,使用Linux系统调用而不是printf教程

    我写了一个汇编程序来显示AT&之后的数字的阶乘. t syntax.But它不工作.我的代码.text .globl _start _start: movq $5,%rcx movq $5,%rax Repeat: #function to calculate factorial decq %rcx cmp $0,%rcx ...

  • 📂x86-64 Linux中不再允许32位绝对地址?教程

    64位Linux默认使用小内存模型,它将所有代码和静态数据置于2GB地址限制之下.这可确保您可以使用32位绝对地址.较旧版本的gcc使用静态数组的32位绝对地址,以便为相对地址计算保存额外的指令.但是,这不再有效.如果我尝试在汇编中创建一个32位的绝对地址,我会收到链接器错误: “在创建共享对象时,不能使用针对`.data’的重定位R\_X86\_64\_32S;使用-fPIC重新编译”....

  • 📂在用户区的x86-64 Linux上CS和SS寄存器的含义是什么?教程

    在内核在第一次进入时加载本机用户区Linux应用程序后,x86-64 CPU寄存器大多为零,除了具有其通常含义的RSP和RIP之外,寄存器CS SS和R11都是非零的:cs 0x33 51 ss 0x2b 43 r11 0x200 512 据我所知,CS和SS寄存器在x86-64上未使用,因为在长模式下我们有一个扁平...

  • 📂linux – 为什么这个简单的汇编程序工作在AT&T语法而不是英特尔语法?教程

    这段代码有什么问题(在x86\_64 Linux上运行)?.intel_syntax .text .globl _start _start: mov rax, 1 mov rdi, 1 mov rsi, msg mov rdx, 14 syscall mov rax, 60 mov rdi, 0 syscall .data...

  • 📂为什么x86-64 Linux系统调用会修改RCX,这个值意味着什么?教程

    我正在尝试使用sys\_brk syscall在linux中分配一些内存.这是我尝试过的:BYTES_TO_ALLOCATE equ 0x08 section .text global _start _start: mov rax, 12 mov rdi, BYTES_TO_ALLOCATE syscall mov rax, 60 sys...

  • 📂linux – 为什么我在调用sys_pause系统调用时收到SIGSEGV?教程

    我正在尝试创建一个x86\_64汇编程序,只要发送SIGTERM信号,就会显示“SIGTERM received”.我的应用程序直接使用Linux系统调用:%define sys_write 0x01 %define sys_rt_sigaction 0x0d %define sys_pause 0x22 %define sys_exit 0x3c...

  • 📂linux – 32位模式下的NASM x86_64汇编:为什么该指令会生成RIP相对寻址代码?教程

    [bits 32] global _start section .data str_hello db "HelloWorld", 0xa str_hello_length db $-str_hello section .text _start: mov ebx, 1 ...

  • 📂java – Linux x86_64上的Cassandra Startup Error 1.2.6教程

    尝试从最新的稳定版本–7000 – 1.2.6在Linux上安装cassandra我已经修改cassndra.yaml指向自定义目录而不是/ var,因为我没有对/ var的写访问权限我在启动时看到这个错误.由于发布似乎相对较新,因此无法在谷歌上找到任何答案.只是将它发布在这里以防万一我身上有一个愚蠢的错误.相同的分发文件在我的macos x86\_64机器上运行正常. INFO 19:24...

  • 📂linux汇编:如何调用syscall?教程

    我想在汇编中调用一个系统调用.问题是我不能运行ecx,rsp. rsp是64位寄存器,ecx是32位寄存器.我想将缓冲区addr作为此系统调用的参数传递.我能做什么?谢谢.section .data s0: db "Largest basic function number supported:%s\n",0 s0len: equ $-s0 section .text...

  • 📂linux – 用gcc编译和运行程序集的最小例子?教程

    int main(int argc, char* argv[]) { return 0; } 什么是最短的汇编示例,可以通过gcc编译成可执行文件?我遇到了this example,但有太多的标签,比如hi\_temp:,.data等,最小版本是什么?解决方法:.text .align 4 .globl main main: pushl %ebp mo...

  • 📂将Linux x86-64程序集hello world程序与ld链接失败教程

    我最近在linux上玩x86 64位汇编,在编译了一个看似简单的程序之后,我一直在摸不着头脑:P虽然我编译和链接它不会抛出任何错误并产生一个Linux ELF 当我尝试运行它时,我得到:.:[ h4unt3r@sp3ctr4l-h0st asm ]:. #(0)> ./hello bash: ./hello: No such file or directory 我假设它生成一个无效...

  • 📂linux – 如何使用汇编语言中的errno打印错误消息教程

    我正在使用sys\_write系统调用以汇编语言写入stdout,如果在写入期间发生错误然后正常退出,我想打印错误消息.我只能退出但不能使用errno和perror打印错误消息.如果系统调用失败,如何处理错误的任何建议.我想根据发生的错误类型打印错误消息. 我在Ubuntu 14.04上,我正在使用nasm来编译汇编代码. 目前我只做这个:test rax,rax ; Lets m...

  • 📂是否可以中断进程并检查它以便稍后恢复?教程

    可以说,你有一个应用程序,它消耗了所有的计算能力.现在你想做一些其他必要的工作.在Linux上是否有任何方法可以中断该应用程序并检查其状态,以便稍后可以从中断的状态恢复它?特别是我对一种方法很感兴趣,可以在另一台机器上停止并重新启动应用程序.这也可能吗?解决方法:一般而言,检查点进程并非完全可能(因为进程不仅是一个地址空间,还有其他资源,如文件描述符和TCP / IP套接字……).在实践中,...

  • 📂linux – 将字符与Intel x86_64程序集进行比较教程

    我是汇编(Intel x86\_64)的新手,我正在尝试从C库中重新编写一些函数.我在64位Linux上并使用NASM进行编译.我的strchr函数有错误,我找不到解决方案……这里提醒一下strchr手册的摘录:char *strchr(const char *s, int c);The strchr() function returns a pointer to the first occ...

  • 📂Linux Scheduler是否知道硬件中断(调度程序抖动)教程

    如果进程被硬件中断(第一级中断处理程序)中断,那么CPU调度程序是否会意识到这一点(例如,调度程序是否将硬件中断的执行时间与中断进程分开计算)?更多细节: 我正在尝试解决htop中的CPU利用率对于指定的数据包加密任务来说太低的问题(CPU在400Mbps加密数据包时<10%;原始加密速度仅为1.6Gbps,因此数据包加密不应该去任何比原始加密速度更快的速度). 说明: 我的假设是...

  • 📂Linux中的GDB调试_x86_64命令信息教程

    我试图用gdb在linux中调试我的程序.我想在linux中验证特定帧的寄存器值,为此我运行两个命令; 信息注册和信息框架我发现不同寄存器的“info reg”命令显示的值与这种情况下的命令“info frame”的保存寄存器显示的值不同.寄存器rbp,rsp,rip对我来说很重要.这些命令有什么区别?当它显示“已保存的寄存器”时,这意味着什么以及这些寄存器保存在哪个位置?解决方法:您希望...

  • 📂linux – 使用waitid系统调用在程序集中等待克隆的子进程教程

    我正在尝试等待我克隆的过程.但是,当父进程使syscall等待时,我在使用strace时得到-1 ECHILD.尽管克隆调用返回了创建的子节点的PID,如下所示:clone(child_stack=0x7ffe2b412d10, flags=CLONE_NEWNS|CLONE_NEWUTS|CLONE_NEWIPC|CLONE_NEWPID) = 3735 waitid(P_PID, 373...

  • 📂linux – 可以ptrace判断x86系统调用是否使用了64位或32位ABI?教程

    我正在尝试使用ptrace跟踪由单独进程生成的所有系统调用,无论是32位(IA-32)还是64位(x86-64).我的跟踪器将在启用了IA-32仿真的64位x86安装上运行,但理想情况下可以跟踪64位和32位应用程序,包括64位应用程序是否分叉并执行32位进程.问题在于,由于32位和64位系统调用号不同,我需要知道进程是32位还是64位来确定它使用哪个系统调用,即使我有系统调用号.似乎有im...

  • 📂c – Linux:通过ptrace()执行系统调用教程

    嘿:) 我目前正在为x86 / x64 Linux开发一个memoryhacking-library. 我努力的目的是实现某种远程系统调用执行.这是我的代码,当我尝试执行有效的系统调用时,它只会崩溃其他进程.(我在代码中使用的所有函数都是ptrace的包装器) 你可以在这里找到完整的代码:http://code.google.com/p/ethonmem/source/browse/l...