gas相关内容
我正在尝试在业余操作系统中执行绝对跳转到地址0x7C00的过程.我正在GAS中使用intel语法,并在QEMU中进行测试.我尝试了两种方法: jmp 0x00007c00 和 mov eax, 0x00007C00 jmp eax 第二种方法似乎按照我的预期工作,并跳转到0x7C00,但是第一种方法导致QEMU崩溃,说明它是“试图在0x40007c00的RAM或ROM外部执行代
..
我有以下代码与macOS上的clang一起使用: .intel_syntax noprefix .data hello: .ascii "Hello world\n" hello_len = . - hello .text .globl _main _main: mov rax, 0x2000004 mov rdi, 1
..
我正在尝试将我的简单程序从Intel语法转换为AT& T(以使用GAS进行编译).我已经成功转换了我的应用程序的很大一部分,但是int(中断)仍然出现错误.我的功能是这样的: printf: mov $0x0e, %ah mov $0x07, %bl nextchar: lodsb or %al, %al jz return
..
在x86-64上,当使用具有 intel语法的GNU汇编程序时,如何以与位置无关的方式(与PIC和PIE兼容)从.data节中加载地址. 例如,使用AT& T语法,您可以这样做: leaq mystring(%rip), %rdi 英特尔语法是否等效?我似乎无法使用搜索引擎找到答案... 实际上,我正在使用noprefix版本的intel语法,以防有所不同. 谢谢
..
GNU汇编程序似乎具有一些控制某些指令发出的操作码的替代形式的方法.例如 .intel_syntax noprefix mov eax, ecx mov.s eax, ecx 使用as test.s -o test.o && objdump -d test.o -M intel处理上面的代码将产生以下反汇编: 0: 89 c8 mov
..
我有一条用Intel语法编写的指令(使用gas作为汇编程序),如下所示: mov rdx, msg_size ... msg: .ascii "Hello, world!\n" .set msg_size, . - msg ,但是该mov指令正在汇编为mov 0xe,%rdx,而不是我期望的mov $0xe,%rdx.我应该如何编写第一条指令(或msg_size的定义)以获得预
..
jonesforth通常以如下方式启动: cat jonesforth.f - | ./jonesforth 什么是调试jonesforth的好方法? 解决方案 在Ubuntu上? 如果您使用的是Ubuntu,请允许gdb附加到正在运行的进程: echo 0 > /proc/sys/kernel/yama/ptrace_scope 如果您希望该设置在重新启动后保
..
当使用GNU GAS手动编写程序集时,在一个函数中,我要设置一个标签,以便: GDB不会将该标签视为函数名称 我可以使用b mylabel破坏标签 在例如如果我将普通标签mylabel定义为: main.S .text .global _start _start: /* exit */ mov $60, %rax mylabel: mov $0,
..
请考虑x64 Intel汇编中的以下变量引用,其中在 .data 部分中声明了变量 a 。 : mov eax,dword ptr [rip + _a] 我很难理解此变量引用的工作方式。由于 a 是对应于变量运行时地址(带重定位)的符号,所以 [rip + _a] 取消引用 a 的正确内存位置?实际上, rip 保留当前指令的地址,该地址是一个大的正整数,因此加法会导致错
..
我需要一些帮助来理解GCC为何这么做 main: pushl%ebp movl %esp,%ebp 和l $ -16,%esp#??? subl $ 48,%esp#??? movl $ 8,16(%esp) movl $ 4,20(%esp) 为什么先减去16然后再减去48? subl $ 64,%esp 会更容易吗? 解决方案 andl $
..
我的任务是将使用NASM的汇编程序转换为GAS.不幸的是,有许多不匹配的语句.我已经转换了其中一些,但是在转换此语句时仍然遇到困难 min resw 1 解决方案 保留一个单词(初始值设定为0)非常简单: min: .word 0 对于x86,.word是16位.对于其他尺寸:.byte,.long,.quad. 如果您想保留一大块(例如50个单词),请使用
..
如何将mov [ebx], al从NASM转换为GAS? 我尝试了mov %al, (%ebx),但确实出现了段错误. 另一个问题,可以说我在GAS中有一个数组.lcomm array, 50 我是否必须像这样在array中放入美元($)标记:mov %rbx, $array还是不需要? 任何答案都会有所帮助:) 解决方案 intel2gas ? usage: intel
..
我不是要引发一场Intel与AT& T之战(无论如何,现在都是话题点,因为它们都支持Intel语法),或者问哪一个本质上“更好",我只是想知道两者之间的实际差异.选择一个. 基本上,几年前当我拿起一些基本的x86组件时,除了我读过的书外,我无缘无故地使用了NASM,这使我坚定而自愿地进入了NASM阵营.从那时起,使用组装的原因就很少了,因此我没有机会尝试使用GAS. 请记住,它们都支持
..
此刻,我正在尝试学习mips组装.为此,我编写了一个非常简单的c程序... int main(){} ...并使用gcc的-S选项在mips机器上对其进行编译,以生成汇编代码.这是主要功能的开头: .ent main main: .frame $fp,8,$31 .mask 0x40000000,-8 .fmask 0x00000000,0
..
我想编写一个DOS程序(我的第一个程序),但是我没有经验. 对于该程序,我需要超过64 KB的(传统)内存.如何获得额外的内存?理想情况下,我想为程序增加两个64k的内存块.我可以开始将数据写入地址空间中的某个地方还是需要请求额外的内存吗? 解决方案 在DOS下,是的,您可以开始使用另一段内存.但是,有一个重要的警告! 查看正在使用的DOS版本的内存映射.您要确保您没有选择实际
..
可能存在重复项,但我无法弄清楚如何将此解决方案或其他解决方案应用于类似问题,所以我在这里. 我正在创建一个函数,该函数在x86 AT& T汇编程序中以字符串形式返回和整数. 我有这段代码来声明变量resdes. .data .align 4 resdes: .long 12 resdes现在指向一个内存位置,后跟其他11个可供我使用的字节(我已经正确理
..
MOV可能是每个人在学习ASM时都会学到的第一条指令. 刚才我遇到了一本书但是我知道它是MOV dest, src.就像“用src加载dest".甚至 Wiki 也是如此. 我并不是说作者错了.我知道他是对的.但是我在这里想念什么? btw ..他正在使用GCC的as汇编这些指令.但这不应该改变指令语法吗? 解决方案 mov dest, src被称为 Intel语法 .
..
这里是: .SECTION .data msg: .string "AAAA" .SECTION .text .globl _start _start: mov $1, %rax mov $1, %rdi mov msg, %rsi mov $4, %rdx syscall 此代码不仅不会不是 segfault,而且不会输出任何内容.
..
我正在尝试创建一个程序以仅在屏幕上编写参数. 我创建了一些程序来获取C函数参数,或者使用C将参数发送给我的asm程序. 有没有办法只使用汇编器来获取程序参数 EX: ./Program "text" 我正在使用(Gnu汇编程序) 通常我使用这些参数 [esp+4] 因为esp是程序/函数调用指针,但是在纯asm中它没有获取命令行参数. 有办法吗? 我用谷
..
我想在Linux上编译以下程序: .global _start .text _start: mov $1, %rax mov $1, %rdi mov $msg, %rsi mov $13, %rdx syscall mov $60, %rax xor %rdi, %rdi syscall msg:
..