; NASM
push 30 ; ‘0’
mov rax, 4 ; write
mov rbx, 1 ; stdout
mov rcx, rsp ; ptr to character on stack
mov rdx, 1 ; length of string = 1
int 80h
上面的代码不会将任何内容输出到stdout。当我对中的字符进行ptr时,它会起作用section .data
。我究竟做错了什么?
amd64
使用系统调用比一个不同的方法int 0x80
,但可能仍然与32位库工作装等。而对x86
一个会做:
mov eax, SYSCALL_NUMBER
mov ebx, param1
mov ecx, param2
mov edx, param3
int 0x80
在amd64
一个反而会做到这一点:
mov rax, SYSCALL_NUMBER_64 ; different from the x86 equivalent, usually
mov rdi, param1
mov rsi, param2
mov rdx, param3
syscall
对于您想要做的事情,请考虑以下示例:
bits 64
global _start
section .text
_start:
push 0x0a424242
mov rdx, 04h
lea rsi, [rsp]
call write
call exit
exit:
mov rax, 60 ; exit()
xor rdi, rdi ; errno
syscall
write:
mov rax, 1 ; write()
mov rdi, 1 ; stdout
syscall
ret
本文向大家介绍什么是指向指针的指针? 相关面试题,主要包含被问及什么是指向指针的指针? 时的应答技巧和注意事项,需要的朋友参考一下 指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址. 此时指针指向的变量长度也是4位.
所以我有一个堆栈,它允许典型的Push和Pop函数。我很难理解这一切实际上是如何在代码方面工作的。我在这里看到了这篇文章,最佳答案中的图片/图表,展示了列表是如何被“推”下来的,你指向最新的元素。我有一个 它挂接到结构“节点” 我如何结合一个推拉与"节点*下一步;"?最难理解的是我将如何真正做到这一点。我知道它最初指向空,然后如果我推一个2,4,6,它将是6,4,2,#。掌握如何实际使用链表中的指
本文向大家介绍堆和栈上的指针有什么区别?相关面试题,主要包含被问及堆和栈上的指针有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 指针所指向的这块内存是在哪里分配的,在堆上称为堆上的指针,在栈上为栈上的指针. 在堆上的指针,可以保存在全局数据结构中,供不同函数使用访问同一块内存. 在栈上的指针,在函数退出后,该内存即不可访问.
问题内容: 这是我的环境: 这是我的程序: 我分配了一个实例,并将其指针转换为。但是当用flag分析时,我发现实例在转换时转义为堆。为什么会这样? 这是分析结果: 我认为此案例与“逃逸分析缺陷”中列出的任何案例都不匹配。 问题答案: 简化您的示例。用进行分析。 范例1 : 输出: 转义分析确定是否有任何对值的引用转义声明该值的函数。在函数中声明的对变量的引用作为函数的参数进行转义:,。 范例2 :
问题内容: 我习惯于进行Java编程,在编程时,您无需真正考虑指针。但是,此刻我正在用C ++编写程序。在创建具有其他类成员的类时,何时应该使用指针,何时不应该使用指针?例如,什么时候我想这样做: 与此相反: 问题答案: 首先避免指针。 在以下情况下使用它们: 您想使用Pimpl习惯用法或抽象工厂。 该实例实际上是由程序的其他部分管理的,而该类仅需要能够访问它。 您想推迟对象的构建(即,您想 在
问题内容: 在C语言中,当我从函数返回堆栈创建的变量的指针时,在函数返回后内存将被丢弃,从而使指针无法取消引用。但是在Go中,编译器没有给我任何错误。这是否意味着这样做是安全的? 问题答案: 是的,这是安全的,并且是Go编程中的常规模式。Go使用转义分析来移动带有指针的所有值,这些指针会自动将栈转义到堆。您无需担心在何处分配值。 从Go常见问题解答中:“我如何知道是在堆还是在堆栈上分配了变量?”