如何确定我的服务器正在使用哪个asm

大卫542

确定使用哪个asm服务器的最直接方法是什么?例如,我有以下C程序:

int main(void) {                                                                                                                                 
    int i = 4;
    return i;
}

并通过编译得到汇编$ gcc -S main.c

  1   .file "main.c"                                                                                                                                 
  2   .text
  3   .globl  main
  4   .type main, @function
  5 main:
  6 .LFB0:
  7   .cfi_startproc
  8   pushq %rbp
  9   .cfi_def_cfa_offset 16
 10   .cfi_offset 6, -16
 11   movq  %rsp, %rbp
 12   .cfi_def_cfa_register 6
 13   movl  $4, -4(%rbp)
 14   movl  -4(%rbp), %eax
 15   popq  %rbp
 16   .cfi_def_cfa 7, 8
 17   ret
 18   .cfi_endproc
 19 .LFE0:
 20   .size main, .-main
 21   .ident  "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4"
 22   .section  .note.GNU-stack,"",@progbits

我想使用https://godbolt.org/选择最接近的语言进行在线编译,但是我不确定应该选择哪种语言(甚至不确定如何确定)。基本上,我所知道的只是“它看起来像ATT语法”。我该如何解决?

彼得·科德斯

GCC通过元数据识别自己; 在asm中,这是.ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4"指令。

通过gcc -v打印GCC版本,您可能已经看到了同样的事情

这表明您的服务器正在使用旧的旧版GCC 4.8.4。(如果您关心优化,我真的建议您使用更新的编译器;例如,gcc 8引入了更简单的自动矢量化功能,该功能对于对齐的数组更好,并且可以让硬件仅使用未对齐的负载来处理未对齐的情况。)

因此,在https://godbolt.org/上,您可以通过将C编译器版本设置为x86-64 GCC 4.8.4并使用-fstack-protector-strong来获得与本地相同的asm (因为Ubuntu将其GCC配置为使用该选项)。通常,您还应该-Wall -O2至少使用-O3查看未优化的asm通常是浪费时间。请参阅如何从GCC / c装配件输出中消除“噪音”?-特别是与Matt Godbolt的CPPcon演讲的链接。)

选择C或C ++作为Godbolt的“语言”;您将在Ubuntu systmem上安装gcc和g ++ 4.8.4。

以后的Ubuntu版本将-fPIE作为默认选项的一部分启用,因此您还必须在Godbolt上手动启用它以匹配您在本地看到的内容。但是我认为14.04太旧了。

(我们可以说这是x86-64,因为堆栈指针是RSP而不是ESP。是的,除非您使用,否则x86上的GCC默认为AT&T语法-masm=intel。Godbolt编译器资源管理器默认为Intel,您可以切换该输出选项。这只是一个尽管同一机器指令的文本语法不同;但是如果您知道如何阅读,则两者无关。)

可能是Godbolt会略有不同版本的头比你在当地得到编译; 我认为其安装程序使用一次安装中的标头而不是每种都有自己的标头来进行不同的编译器安装。不过,我对此可能是错的。通常没关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何确定我的服务器正在运行哪个版本的Microsoft Internet信息服务(IIS)?

来自分类Dev

如何确定DNSMasq使用的是哪个DNS服务器?

来自分类Dev

如何确定DNSMasq使用的是哪个DNS服务器?

来自分类Dev

我如何知道哪个Web服务器Zimbra 8.0.6正在运行?

来自分类Dev

如何确定berkshelf是否正在连接到我的厨师服务器

来自分类Dev

dnsmasq正在使用哪个dns服务器

来自分类Dev

确定哪个正在运行的服务器,一个 emacsclient 附加到?

来自分类Dev

我如何知道旧版本的Redmine正在运行在哪个服务器上?

来自分类Dev

我的服务器正在使用 Ubuntu 16.04.6 LTS 。老实说,更新到哪个版本最安全?

来自分类Dev

如何查找我正在使用的DNS服务器(在多个已配置的dns服务器中)

来自分类Dev

我应该使用哪个版本的microsoft 2008服务器?

来自分类Dev

我应该使用哪个NTP服务器?

来自分类Dev

服务器如何知道GET请求中正在使用哪个字符编码的查询字符串?

来自分类Dev

如何确定适合我系统的服务器要求?

来自分类Dev

我如何知道正在使用的Web服务器gradle / grails?

来自分类Dev

如何使用Python检查我的服务器是否已启动并正在运行?

来自分类Dev

如何知道服务器正在使用自我签名证书

来自分类Dev

我正在使用哪些DNS服务器?

来自分类Dev

我的服务器正在吃掉 ram 的使用量

来自分类Dev

如何确定驱动器正在使用哪个SATA控制器?

来自分类Dev

服务器如何确定要发送到哪个客户端端口?

来自分类Dev

如何确定GPG“自动密钥检索”从哪个服务器检索密钥?

来自分类Dev

如何知道哪个客户端正在向服务器发送消息

来自分类Dev

WebRTC如何确定要使用的TURN服务器

来自分类Dev

哪个tftp服务器正在运行

来自分类Dev

如何确定NFS远程服务器是否正在导出目录?

来自分类Dev

Clojure Ring:如何确定开发服务器是否正在运行?

来自分类Dev

如何找到Xubuntu 14.04服务器正在使用的DNS服务器?

来自分类Dev

如何使用Java将线程委派给多个服务器并跟踪哪个线程位于哪个服务器上

Related 相关文章

  1. 1

    如何确定我的服务器正在运行哪个版本的Microsoft Internet信息服务(IIS)?

  2. 2

    如何确定DNSMasq使用的是哪个DNS服务器?

  3. 3

    如何确定DNSMasq使用的是哪个DNS服务器?

  4. 4

    我如何知道哪个Web服务器Zimbra 8.0.6正在运行?

  5. 5

    如何确定berkshelf是否正在连接到我的厨师服务器

  6. 6

    dnsmasq正在使用哪个dns服务器

  7. 7

    确定哪个正在运行的服务器,一个 emacsclient 附加到?

  8. 8

    我如何知道旧版本的Redmine正在运行在哪个服务器上?

  9. 9

    我的服务器正在使用 Ubuntu 16.04.6 LTS 。老实说,更新到哪个版本最安全?

  10. 10

    如何查找我正在使用的DNS服务器(在多个已配置的dns服务器中)

  11. 11

    我应该使用哪个版本的microsoft 2008服务器?

  12. 12

    我应该使用哪个NTP服务器?

  13. 13

    服务器如何知道GET请求中正在使用哪个字符编码的查询字符串?

  14. 14

    如何确定适合我系统的服务器要求?

  15. 15

    我如何知道正在使用的Web服务器gradle / grails?

  16. 16

    如何使用Python检查我的服务器是否已启动并正在运行?

  17. 17

    如何知道服务器正在使用自我签名证书

  18. 18

    我正在使用哪些DNS服务器?

  19. 19

    我的服务器正在吃掉 ram 的使用量

  20. 20

    如何确定驱动器正在使用哪个SATA控制器?

  21. 21

    服务器如何确定要发送到哪个客户端端口?

  22. 22

    如何确定GPG“自动密钥检索”从哪个服务器检索密钥?

  23. 23

    如何知道哪个客户端正在向服务器发送消息

  24. 24

    WebRTC如何确定要使用的TURN服务器

  25. 25

    哪个tftp服务器正在运行

  26. 26

    如何确定NFS远程服务器是否正在导出目录?

  27. 27

    Clojure Ring:如何确定开发服务器是否正在运行?

  28. 28

    如何找到Xubuntu 14.04服务器正在使用的DNS服务器?

  29. 29

    如何使用Java将线程委派给多个服务器并跟踪哪个线程位于哪个服务器上

热门标签

归档