使用 GCC 扩展 ASM 将内联 Intel ASM 转换为 AT&T ASM

2023-12-02

我花了 2 天的时间来研究 AT&T 内联汇编,但是在转换这个汇编时遇到了一些问题:

static char vendername[50] = {0};
_asm {
    mov     eax, 0
    cpuid
    mov     dword ptr [vendername], ebx
    mov     dword ptr [vendername+4], edx
    mov     dword ptr [vendername+8], ecx
}

这是我的尝试:

static char vendername[50] = {0};
__asm__(
    "movl $0,%%eax \n"
    "cpuid \n"
    "movl %%ebx, %[vendername] \n"
    "movl %%edx, %[vendername+$4] \n"
    "movl %%ecx, %[vendername+$8] \n"
    :"=r"(vendername) //user vendername as output
    :[vendername]"m"(vendername) //use vendername as input
    :"eax","ebx","edx","ecx" // clobbers those regs
);

这段代码不起作用,gcc 给我以下错误:

error: undefined named operand ‘vendername+4’

and

error: undefined named operand ‘vendername+8’

如何将代码从 Intel 汇编转换为 AT&T 汇编?


经验法则是,如果你曾经写过mov在内联汇编中你可能做错了:) 编译器可以自行加载/存储值,即。

int dummy;
union {
    char text[12];
    struct {
        int ebx;
        int edx;
        int ecx;
    };
} vendorname;
__asm__(
    "cpuid \n"
    : "=b" (vendorname.ebx), "=d" (vendorname.edx), "=c" (vendorname.ecx), "=a" (dummy)
    : "a" (0)
);

请注意,由于必须将 3 个双字解释为字符串,因此情况变得很复杂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GCC 扩展 ASM 将内联 Intel ASM 转换为 AT&T ASM 的相关文章

  • 如何在 MacOS 上使用 nasm 进行编译

    我正在尝试在汇编器上编译并链接我的第一个程序 我尝试编译以下代码 include stud io inc global main section text main xor eax eax again PRINT Hello PUTCHAR
  • gcc 链接器库搜索顺序;路径加静态与共享

    通读 gcc 手册 我相信以下两种说法是正确的 在命令行上指定的库搜索路径在 默认 路径之前搜索 我认为这意味着 LIBRARY PATH 环境变量中的内容 共享库将优先于静态库进行链接 在没有标志说明要这样做的情况下 但这两者谁占主导地位
  • gcc 删除内联汇编代码

    看起来 gcc 4 6 2 删除了它认为函数中未使用的代码 test c int main void goto exit handler asm volatile jmp 0x0 exit return 0 拆解main 0x0804840
  • 如何反汇编、修改然后重新组装 Linux 可执行文件?

    无论如何 这可以做到吗 我使用过 objdump 但它不会产生我所知道的任何汇编器都可以接受的汇编输出 我希望能够更改可执行文件中的指令 然后对其进行测试 我认为没有任何可靠的方法可以做到这一点 机器代码格式非常复杂 比汇编文件还要复杂 实
  • 为什么前向引用 ADR 指令在 Thumb 代码中以偶数偏移进行汇编?

    To bx对于 Thumb 函数 需要设置地址的最低有效位 GNU 作为文档states https sourceware org binutils docs as ARM Opcodes html当地址是从一个生成时这是如何工作的adr伪
  • x86 程序集 Pushl/popl 不适用于“错误:后缀或操作数无效”

    我是汇编编程的新手 正在努力解决编程基础 http savannah nongnu org projects pgubook 在带有 GNU 汇编器 v2 20 1 的 Ubuntu x86 64 桌面上 我已经能够汇编 链接执行我的代码
  • 汇编语言程序中连续两次相乘

    我正在使用 8086 模拟器以及 DOSBOX 和 MASM 我知道当我们将 8 位与 8 位相乘时 答案将是 16 位 al 8 bit ax 当我们将 16 位与 16 位相乘时 答案将是 32 位 ax 16 bit dx ax 但如
  • 将以下机器语言代码(0x2237FFF1)翻译成MIPS汇编

    到目前为止我已经翻译了这段代码 但我不明白的是如何计算 计算 16 位立即地址的数量 0x2237FFF1 转为二进制 0010 0010 0011 0111 1111 1111 1111 0001 现在我正在读取操作码 001000 并知
  • 哪些 GCC 优化标志对二进制大小影响最大?

    我正在使用 GCC 为 ARM 开发 C 我遇到了一个问题 我没有启用优化 我无法创建二进制文件 ELF https en wikipedia org wiki Executable and Linkable Format 对于我的代码 因
  • 测试 xmm/ymm 寄存器是否为零的更快方法?

    It s fortunate that PTEST does not affect the carry flag but only sets the rather awkward ZF also affects both CF and ZF
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • C++ 自注册类有多安全?

    来自 哪里这个线程 https stackoverflow com questions 77817 c runtime knowledge of classes我用 C 实现了一个与所选解决方案类似的系统 我现在的问题是 用户 Daniel
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • 处理器在操作码​​和数据之间有何不同? [复制]

    这个问题在这里已经有答案了 我正在尝试编写一个反汇编程序 我想知道处理器如何区分操作码和数据字节 例如 这是 Hello World 的字节表示 0x48 0x65 0x6c 0x6c 0x6f 0x20 0x57 0x6f 0x72 0x
  • cpp 和 gcc -E 的区别

    我以为两者cpp foo c and gcc E foo c以相同的方式预处理源文件 但是对于同一文件 我得到的输出有所不同 cat foo c define VARIABLE 3 define PASTER x y x y define
  • 为什么GCC编译的应用程序总是包含_mcount符号?

    库并不总是包含 mcount 符号 但应用程序包含 您可以使用 gobjdump 或 nm 实用程序验证这一点 我读过 mcount 用于实现分析 但即使禁用分析并启用优化 O2 该符号仍然存在 它还有其他额外的用途吗 更新 我使用的是 S
  • _MM_TRANSPOSE4_PS 在 GCC 中导致编译器错误?

    我第一次在 GCC 而不是 MSVC 中编译我的数学库 并经历了所有的小错误 我遇到了一个根本没有意义的错误 Line 284 error lvalue required as left operand of assignment 284号
  • 将代码保存在 L1 缓存中

    我一直在阅读维基百科关于 K 编程语言的文章 http en wikipedia org wiki K programming language Performance characteristics这就是我所看到的 解释器的小尺寸和语言的

随机推荐

  • 初学者从结构数组中删除第一个元素 (C)

    我有一个结构数组 实际上它是一个按优先级排序的堆数组 typedef struct char name MAX CHARACTERS 1 int priority person person p MAX HEAPSIZE 1 并想要删除数组
  • 使用 python 更快地搜索 Azure blob 名称?

    我有一个需要在 Azure 上搜索的文件名列表 现在 作为一个菜鸟 我正在循环每个 blob 名称并比较字符串 但我认为必须有最简单 快速的方法来完成此任务 当前的解决方案使我的 HTTP 响应非常慢 def ifblob exists s
  • 为什么 var_dump 可以确定私有变量的值,但在尝试访问单个属性时却不能

    我有一个对象被扔到会话数组中 我想运行 foreach 在 items 属性上 我似乎无法访问它 我看到它是私有的 但我忍不住想知道为什么 var dump 可以向我显示该属性包含的内容 但我无法读取数据 因为它会引发致命错误 我想如果我真
  • ruby on Rails 中的 Bootstrap 模式不起作用

    我正在尝试实现一个模式来为我的应用程序创建新用户 由于某种原因无法使其工作 这段代码只是淡入淡出 并且没有显示任何模式 我不明白为什么 事实上 我正在使用与此答案完全相同的代码如何使用 link to 添加引导模式 以便链接内容在模式中打开
  • 在 iOS 中将 PDF 文本写入 PDFContext

    通过以下方式绘制到 pdf 上下文非常简单 UIGraphicsBeginPDFContextToFile pdfFile CGRectZero nil UIGraphicsBeginPDFPageWithInfo sheet frame
  • UITableViewCell 内 UITableView 的动态行高度

    我有一个 主 UITableView 其中我使用从 xib 加载的不同单元格 其中一些单元格本身也有一个 UITableView 现在我已将每个单元格的行高设置为原始 xib 大小 但是 我希望高度动态并与 子 UITableView 中的
  • 尝试更新 MongoDb 数组元素时出错

    在我的 Azure CosmosDb MongoApi 中 我有带有嵌入文档数组的 JSON id ObjectId 5a95745df886842904b82f71 token value1 channel value2 urls url
  • 在 IF 语句中对数组使用 DelayedExpansion 索引变量失败

    我有一个批处理文件 其中显示目录中的所有 pem 文件 为用户提供选择一个文件的选项 此时只是尝试使用他们选择的数字来显示他们选择的文件 ECHO数组的内容 我相信不知何故 因为它位于 IF 语句内部 所以索引变量 selectedPem
  • Swift:#warning 等效项

    Swift 有类似的 warning 吗 它只是用于在 Xcode 自己的 GUI 中显示警告 我也对是否有 error 等效项感兴趣 苹果表示 pragma mark 即将推出 可能与此相同 Edit 从 Swift 4 2 开始 语言级
  • R:使用 IFELSE 替代方案创建数据框的最快方法

    我有一个类似的问题 这个问题在这个线程上 使用 R 将矩阵中 但就我而言 假设我有更大的数据集和可变阈值 我需要使用同一数据帧第一列上的值创建一个数据帧 其中包含从条件中检索的每个值 每条线的这些值都不同 这是数据框的示例 SNP A1 A
  • C# 将密钥发送到其他应用程序到特定文本字段

    我需要使用 C 将密钥发送到其他应用程序到其他应用程序中的特定文本字段 那可能吗 如果是 有人可以给我示例代码吗 SendKeys只将击键组合发送到活动窗口 因此 如果您的 C 应用程序调用SendKeys在正确的时间运行 当用户将其他应用
  • Javascript 中的 String 是原始类型还是对象?

    Javascript 中的 String 是原始类型还是对象 消息人士称 Undefined Null Boolean Number 和 String 都是 Javascript 中的原始类型 但它说 String 也是一个对象 我很困惑
  • Java:扩展类加载器从 Java 13 中的哪里获取类?

    我能找到的所有文档都提到了 jre lib ext 文件夹 但我的 JRE 13 安装中不存在该文件夹 我猜想在 Java 8 我可以在 jre lib ext 中看到 jar 和 Java 13 之间的某个地方 它们移动了 但我无法确定它
  • 批量替换文本文件中的文本(Linux/OSX 命令行)

    我有数百个文件 需要更改其部分文本 例如 我想将 http 的每个实例替换为 rtmp 这些文件具有 txt 扩展名 并且分布在多个文件夹和子文件夹中 我基本上正在寻找一种遍历每个文件夹 子文件夹和每个文件的方法 脚本 如果它在该文件中发现
  • 终止空闲的 mysql 连接

    我看到很多连接处于打开状态并且长时间处于空闲状态 例如 5 分钟 是否有任何解决方案可以在不重新启动 mysql 服务的情况下从服务器终止 关闭它 我正在维护旧版 PHP 系统 无法关闭为执行查询而建立的连接 我是否应该将 my cnf 文
  • UIImageView 动画RepeatCount 奇怪的行为

    所以我有这段代码可以无限次地对一组图像进行动画处理 但是一旦我尝试限制它的动画处理次数 它就不起作用了 甚至没有显示图像 有效的代码 animatedMap animationImages NSArray arrayWithObjects
  • 如何为图标内的文本着色

    我想问是否有一种方法可以为我将鼠标悬停在下面链接的图标上添加颜色 例如 如果我将鼠标悬停在文本上 如何才能仅将文本的颜色设置为 红色 我认为你必须结合照片编辑器来完成它 但我真的不知道如何做 感谢帮助 这是我尝试过的代码 section a
  • Mysql - 更新表中列具有空值的第一行

    我有一个包含 API 密钥列表的数据库 我需要将电子邮件和姓名与这些关联起来 我希望我的查询更新第一行中电子邮件为空的姓名和电子邮件 id key name email 1 3046GUGYi7ab NULL NULL 2 TXQzL33H
  • 在没有工具栏的新进程中启动 Internet Explorer 7

    我需要在 IE 中运行一个 Web 应用程序 因此它至少看起来与独立应用程序类似 我还需要能够在单独的会话中同时运行此 Web 应用程序的多个实例 为了实现这种外观 我希望始终在新进程中启动 Internet Explorer 7 而无需从
  • 使用 GCC 扩展 ASM 将内联 Intel ASM 转换为 AT&T ASM

    我花了 2 天的时间来研究 AT T 内联汇编 但是在转换这个汇编时遇到了一些问题 static char vendername 50 0 asm mov eax 0 cpuid mov dword ptr vendername ebx m