草庐IT

ASSEMBLY

全部标签

linux - 如何使用十六进制编辑器在Linux中制作可执行的ELF文件?

只是好奇。显然,这对于实际编程而言不是一个很好的解决方案,但是我说我想在Bless(十六进制编辑器)中创建一个可执行文件。我的体系结构是x86。我可以制作一个非常简单的程序?你好,世界?无限循环?与this问题类似,但在Linux中。 最佳答案 正如我的评论中所提到的,您实际上将为可执行文件编写自己的elf-header,以消除不需要的部分。仍然需要几个部分。Muppetlabs-TinyPrograms上的文档很好地解释了此过程。为了好玩,这里有几个例子:等效于/bin/true(45字节):000000007F454C46010

linux - Perf 启动开销 : Why does a simple static executable which performs MOV + SYS_exit have so many stalled cycles (and instructions)?

我试图了解如何衡量性能并决定编写非常简单的程序:section.textglobal_start_start:movrax,60syscall然后我用perfstat./bin运行了程序。令我惊讶的是stalled-cycles-frontend太高了。0.038132task-clock(msec)#0.148CPUsutilized0context-switches#0.000K/sec0cpu-migrations#0.000K/sec2page-faults#0.052M/sec107,386cycles#2.816GHz81,229stalled-cycles-fronten

linux - Perf 启动开销 : Why does a simple static executable which performs MOV + SYS_exit have so many stalled cycles (and instructions)?

我试图了解如何衡量性能并决定编写非常简单的程序:section.textglobal_start_start:movrax,60syscall然后我用perfstat./bin运行了程序。令我惊讶的是stalled-cycles-frontend太高了。0.038132task-clock(msec)#0.148CPUsutilized0context-switches#0.000K/sec0cpu-migrations#0.000K/sec2page-faults#0.052M/sec107,386cycles#2.816GHz81,229stalled-cycles-fronten

linux - x86 ASM Linux - 使用 .bss 部分

我希望这些问题相当简单:(NASM编译器、Linux、x86Intel语法)第1部分:我正在尝试弄清楚如何使用汇编程序的.bss部分找到一种方法来存储值,例如来自操作(+-*/)的值到已声明的变量。例如:section.bssvariable:resb50;Imaginarybuffersection.textadd10,1;Operation;movetheresultintovariable所以,我知道可以使用内核中断来读取用户输入(但这涉及字符串,但是有没有办法将这个值复制到variable变量中,以便它以后可以使用吗?这比必须将两个东西压入和压出堆栈要容易得多。第2部分:有没有

linux - x86 ASM Linux - 使用 .bss 部分

我希望这些问题相当简单:(NASM编译器、Linux、x86Intel语法)第1部分:我正在尝试弄清楚如何使用汇编程序的.bss部分找到一种方法来存储值,例如来自操作(+-*/)的值到已声明的变量。例如:section.bssvariable:resb50;Imaginarybuffersection.textadd10,1;Operation;movetheresultintovariable所以,我知道可以使用内核中断来读取用户输入(但这涉及字符串,但是有没有办法将这个值复制到variable变量中,以便它以后可以使用吗?这比必须将两个东西压入和压出堆栈要容易得多。第2部分:有没有

linux - 当我在 system_read 中断、程序集方面按下 Enter 按钮时究竟发生了什么?

我有这个代码:section.bssbuffresb1readfromkeyboard:moveax,3;specifysystemreadmovebx,0;specifystandardin->keyboardmovecx,buff;wheretostorewhatisreadmovedx,1;read1byteint0x80;telllinuxtodoeverythingabovemoveax,4;sys_writemovebx,1;Standardoutputmovecx,buff;whattoprintmovedx,1;howlongtoprintint0x80;telllin

linux - 当我在 system_read 中断、程序集方面按下 Enter 按钮时究竟发生了什么?

我有这个代码:section.bssbuffresb1readfromkeyboard:moveax,3;specifysystemreadmovebx,0;specifystandardin->keyboardmovecx,buff;wheretostorewhatisreadmovedx,1;read1byteint0x80;telllinuxtodoeverythingabovemoveax,4;sys_writemovebx,1;Standardoutputmovecx,buff;whattoprintmovedx,1;howlongtoprintint0x80;telllin

c - 代码段的动态重定位

出于好奇,我想知道是否有可能在期间重新定位一段代码程序的执行。例如,我有一个函数,这个函数应该每次执行后都会在内存中替换。我们想到的一个想法是使用自修改代码来做到这一点。根据网上的一些资源,自行修改代码可以在Linux上执行,但我仍然不确定这样的动态重定位是否可行。有人有这方面的经验吗? 最佳答案 是的,动态重定位绝对是可能的。但是,您必须确保代码是完全独立的,或者它通过绝对引用访问全局变量/外部函数。如果您的代码可以完全独立于位置,这意味着它所做的唯一引用是相对于自身的,那么您就设置好了。否则,您将需要在加载时自己进行修复。在GC

c - 代码段的动态重定位

出于好奇,我想知道是否有可能在期间重新定位一段代码程序的执行。例如,我有一个函数,这个函数应该每次执行后都会在内存中替换。我们想到的一个想法是使用自修改代码来做到这一点。根据网上的一些资源,自行修改代码可以在Linux上执行,但我仍然不确定这样的动态重定位是否可行。有人有这方面的经验吗? 最佳答案 是的,动态重定位绝对是可能的。但是,您必须确保代码是完全独立的,或者它通过绝对引用访问全局变量/外部函数。如果您的代码可以完全独立于位置,这意味着它所做的唯一引用是相对于自身的,那么您就设置好了。否则,您将需要在加载时自己进行修复。在GC

linux - "mov rax, QWORD PTR fs:0x28"汇编指令有什么作用?

这个问题在这里已经有了答案:Whydoesthismemoryaddress%fs:0x28(fs[0x28])havearandomvalue?(3个答案)关闭4年前。紧接执行此指令之前,fs包含0x0。另外我想知道如何从GDB中的这个内存区域读取,该命令是什么?