相关疑难解决方法(0)

编程中的托管代码或非托管代码是什么?

我在我的C#代码中使用了一个特定的命令,该代码运行良好.但是,据说在"非托管"代码中行为不端.

什么是托管代码或非托管代码?

.net c# unmanaged managed definition

145
推荐指数
5
解决办法
16万
查看次数

本机和托管代码之间的区别?

例如,在查看GlowCode分析器网站时,它说:

"GlowCode 6.2和x64配置文件本机,托管和混合C++,C#,.NET代码"

他们的意思是什么?

native managed

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

汇编,机器代码,字节码和操作码之间的实际关系是什么?

汇编,机器代码,字节码和操作码之间的实际关系是什么?

我看过最大约装配和机器代码的SO问题,比如这个,但他们太高水平和不显示的实际汇编代码示例被改造成机器代码.结果,我仍然不明白它是如何在更深层次上运作的.

这个问题的理想答案将显示一些汇编代码的具体示例,例如下面的代码段,以及每个汇编指令如何映射到机器代码,字节码和/或操作码.像这样的答案对未来的人们学习集会非常有帮助,因为在过去的几天挖掘中我没有找到任何明确的总结.

我要找的主要内容是:

  1. 一段汇编代码
  2. 一段机器代码
  3. 程序集和机器代码片段之间的映射(如何进行映射,或者至少是一些一般示例,以及如何知道如何执行此操作,Web上的所有这些信息都在哪里)
  4. 如何解释机器代码(就像操作码以某种方式相关,以及网上关于所有这些数字意味着什么的所有信息)

注意:我没有计算机科学背景,所以我在过去的几年里一直在慢慢走低水平,现在已经到了想要了解装配和机器代码的程度.

装配与机器代码之间的关系

我目前的理解是"汇编程序"(如NASM)接收汇编代码并从中创建机器代码.

所以当你编译一些这样的程序集时example.asm:

global main
section .text

main:
  call write

write:
  mov rax, 0x2000004
  mov rdi, 1
  mov rsi, message
  mov rdx, length
  syscall

section .data
message: db 'Hello, world!', 0xa
length: equ $ - message
Run Code Online (Sandbox Code Playgroud)

(用它编译nasm -f macho64 -o example.o example.asm).它输出这个example.o目标文件:

cffa edfe 0700 0001 0300 0000 0100 0000
0200 0000 0001 0000 0000 0000 0000 …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction assembly bytecode llvm

10
推荐指数
5
解决办法
2029
查看次数

了解托管C++

我无法理解托管C++如何工作和编译.

在.NET Framework中,您可以使用C#/ VB/F#/ ..等开发代码.并且所有这些语言都将编译为与Java字节码类似的相同公共中间语言(CIL).从理论上讲,CIL可以安装在任何平台上(Mono使其实用).在Windows上,CLR将CIL编译为本机代码Just-In-Time(JIT),一切运行顺利,好用.

现在,Managed C++如何编译?它是否编译为CIL代码并等待CLR使用JIT运行它?我认为不是,因为托管C++可以使用标准C++代码(不编译为CIL).此外,它如何使用.NET程序集(CIL)?

我将不胜感激任何帮助.谢谢

编辑:

我看到了这个答案.它指出,在C++/CLI中,托管代码被编译为MSIL,您可以选择将非托管代码编译为本机代码或MSIL.因此,我现在明白如何调用.NET程序集.

无论如何,如果将非托管代码编译为本机代码,我仍然不明白如何在同一程序集中使用托管代码运行C++非托管代码.有任何想法吗?

.net c++ clr cil managed

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

标签 统计

managed ×3

.net ×2

assembly ×1

bytecode ×1

c ×1

c# ×1

c++ ×1

cil ×1

clr ×1

compiler-construction ×1

definition ×1

llvm ×1

native ×1

unmanaged ×1