相关疑难解决方法(0)

什么是"运行时"?

我听说过"C Runtime","Visual C++ 2008 Runtime",".NET公共语言运行时"等等.

  • 究竟什么是" 运行时 "?
  • 它是什么做的?
  • 它如何与我的代码交互?或者更确切地说,我的代码如何由它控制?

在Linux上编写汇编语言时,我可以使用INT指令进行系统调用.那么,运行时只是一堆预制函数将低级函数包装成更抽象的高级函数吗?但这不是更像是库的定义,而不是运行时的定义吗?

"运行时"和" 运行时库 "有两个不同的东西吗?

添加1

这些天,我想也许Runtime与所谓的虚拟机有一些共同点,比如JVM.这是导致这种想法的引文:

这个编译过程非常复杂,可以分解为几个抽象层,这些过程通常涉及三个转换器:编译器,虚拟机实现和汇编器.--- 计算系统的要素(介绍,道路到硬件土地)

添加2

该书C专家编程:深度C的秘密.第6章运行时数据结构是对此问题的有用参考.

terminology

347
推荐指数
8
解决办法
12万
查看次数

如何在没有操作系统的情况下运行程序?

如何在没有运行操作系统的情况下自行运行程序?你能创建计算机可以在启动时加载和运行的汇编程序,例如从闪存驱动器启动计算机并运行cpu上的程序吗?

x86 assembly operating-system osdev bootloader

227
推荐指数
3
解决办法
8万
查看次数

什么是更好的"int 0x80"或"系统调用"?

我研究Linux内核并发现,对于int 0x80体系结构,中断syscall不能用于调用系统调用.

问题是:在int 0x80架构的情况下什么是更可取的int 0x80syscall为什么?

编辑:我使用内核3.4

linux x86 assembly system-calls

57
推荐指数
3
解决办法
3万
查看次数

在操作系统的上下文中,Ring 0和Ring 3是什么?

我一直在学习Windows中驱动程序开发的基础知识我一直在寻找Ring 0Ring 3这两个术语.这些是指什么?它们与内核模式用户模式相同吗?

operating-system driver

35
推荐指数
2
解决办法
4万
查看次数

中断服务程序会发生什么?

有人可以向我解释在中断服务程序中发生了什么(虽然它取决于具体的例程,一般的解释就足够了)?这总是对我来说是一个黑盒子.

c unix

21
推荐指数
1
解决办法
5万
查看次数

如何在内联汇编中通过sysenter调用系统调用?

我们如何在x86 Linux中直接使用sysenter/syscall实现系统调用?有人可以提供帮助吗?如果您还可以显示amd64平台的代码,那就更好了.

我知道在x86中,我们可以使用

__asm__(
"               movl $1, %eax  \n"
"               movl $0, %ebx \n"
"               call *%gs:0x10 \n"
);
Run Code Online (Sandbox Code Playgroud)

间接路由到sysenter.

但是我们如何使用sysenter/syscall直接编码来发出系统调用呢?

我找到了一些材料http://damocles.blogbus.com/tag/sysenter/.但仍然难以弄明白.

linux x86 gcc x86-64 system-calls

19
推荐指数
2
解决办法
1万
查看次数

在操作系统中,系统调用和中断之间有什么区别?

在操作系统中,系统调用和中断之间有什么区别?所有系统调用都是中断吗?所有中断都是系统调用吗?

operating-system interrupt system-calls

9
推荐指数
2
解决办法
1万
查看次数

Linux 中的“int 80h”是什么?

我想了解我们为什么使用int 80h以及在汇编代码中调用它后会发生什么。像这儿:

int 80h
mov eax,1
int 80h
Run Code Online (Sandbox Code Playgroud)

它怎么知道我要调用系统退出,而不只是在eax中保存十进制数?

linux x86 assembly system-calls linux-kernel

6
推荐指数
1
解决办法
1万
查看次数

GCC 内联程序集错误:“'int' 的操作数大小不匹配”

首先,如果有人知道标准 C 库的一个函数,该函数无需查找二进制零即可打印字符串,但需要绘制字符数,请告诉我!

否则,我有这个问题:

void printStringWithLength(char *str_ptr, int n_chars){

asm("mov 4, %rax");//Function number (write)
asm("mov 1, %rbx");//File descriptor (stdout)
asm("mov $str_ptr, %rcx");
asm("mov $n_chars, %rdx");
asm("int 0x80");
return;

}
Run Code Online (Sandbox Code Playgroud)

GCC 将以下错误告知“int”指令:

"Error: operand size mismatch for 'int'"
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我这个问题吗?

c assembly gcc x86-64 inline-assembly

3
推荐指数
1
解决办法
6387
查看次数

strcpy 或 strcat C++ 函数调用哪个系统调用?

我想知道 strcpy 或 strcat 之类的函数是否会导致任何系统调用,还是由操作系统内部处理?

linux system-calls

1
推荐指数
1
解决办法
1471
查看次数

你好,有 Linux 系统调用的汇编语言世界?

  1. 我知道这int 0x80会在 linux 中造成中断。但是,我不明白这段代码是如何工作的。它会返回一些东西吗?

  2. 代表什么$ - msg

global _start

section .data
    msg db "Hello, world!", 0x0a
    len equ $ - msg

section .text
_start:
    mov eax, 4
    mov ebx, 1
    mov ecx, msg
    mov edx, len
    int 0x80 ;What is this?
    mov eax, 1
    mov ebx, 0
    int 0x80 ;and what is this?
Run Code Online (Sandbox Code Playgroud)

linux x86 assembly nasm system-calls

0
推荐指数
1
解决办法
1179
查看次数

main 与 _start 中的返回值

请注意,这个问题在这里已经有类似的答案,我想指出:

然而,这个问题更多地询问它们的返回格式以及它们如何相互关联(我认为上面的问题没有完全涵盖)。


_start和之间有什么区别main?在我看来,像ld用途_start,但gcc用途main为切入点。我注意到的另一个区别是main似乎返回值 in %rax,而_start返回值 in%rbx

以下是我看到的两种方式的示例:

.globl _start
_start:
    mov $1, %rax
    mov $2, %rbx
    int $0x80
Run Code Online (Sandbox Code Playgroud)

并运行它:

$ as script.s -o script.o; ld script.o -o script; ./script; echo $?
# 2
Run Code Online (Sandbox Code Playgroud)

另一种方式:

.globl main
main:
    mov $3, %rax
    ret
Run Code Online (Sandbox Code Playgroud)

并运行它:

$ gcc script.s -o script; ./script; echo $?
3
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别?是否main自动调用_start某处,或者它们如何相互关联?为什么一个返回它们的值,rbx而另一个返回它的值rax …

c assembly program-entry-point x86-64

0
推荐指数
1
解决办法
278
查看次数