gpt4 book ai didi

c - 程序集:从 C 调用或作为独立程序创建时的数据段

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:07 25 4
gpt4 key购买 nike

我对此感到困惑;我不认为应该有任何区别在这两种情况下,程序最终都是 exe 文件。如果您有不同的看法,请提供帮助....

让我澄清一下我的问题:数据段定义或处理是否有差异
在我创建“独立”汇编程序和从C 程序调用汇编例程之间?

在这两种情况下,谁来定义日期段的位置或大小?这是编译器还是操作系统?两种情况下数据段的值是如何确定的?

最佳答案

取决于操作系统!

如果我们正在寻找 IA32 下的 windows 操作系统,那么 API 会保留一些应用程序的虚拟内存地址空间,并且:

  • CS 段,指向程序或代码存储器。
  • DS段,指向的开始变量或数据存储器。
  • SS段,指向的开始堆栈内存,与 DS 相同。
  • ES 作为额外段通常在用于字符串传输指令(lodsb, stosw, ...) 并且与 DS 相同。
  • FS 作为另一个额外的段点在操作系统内核数据上,如 Win32 Thread InformationBlock .
  • GS 作为另一个额外的部分是0 作为已加载应用程序分配的虚拟内存地址空间的开始。

通过 FS 段访问“Win32 线程信息 block ”的示例:

function GetThreadId: integer;
//result := GetCurrentThreadId;
asm
mov eax, fs:[$18] //eax := thread information block
mov eax, [eax + $24] //eax := thread id
end; { GetThreadId }

还有:x86 memory segmentation

关于c - 程序集:从 C 调用或作为独立程序创建时的数据段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2704922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com