将 AT&T 语法转换为英特尔语法 (ASM)
Convert AT&T syntax to Intel Syntax (ASM)
>我一直在尝试访问可执行文件的peb信息,如下所示: Access x64 TEB C++ & Assembly
由于某种奇怪的原因,该代码仅在AT&T语法中工作,但是当我尝试使用Intel语法时,它无法给出相同的值。当然,我有一个错误。所以我问..
如何转换:
int main()
{
void* ptr = 0; //0x7fff5c4ff3c0
asm volatile
(
"movq %%gs:0x30, %%raxnt"
"movq 0x60(%%rax), %%raxnt"
"movq 0x18(%%rax), %%raxnt"
"movq %%rax, %0n"
: "=r" (ptr) ::
);
}
到英特尔语法?
我试过了:
asm volatile
(
"movq rax, gs:[0x30]nt"
"movq rax, [rax + 0x60]nt"
"movq rax, [rax + 0x18]nt"
"movq rax, %0n"
: "=r" (ptr) ::
);
和:
asm volatile
(
"mov rax, QWORD PTR gs:[0x30]nt"
"mov rax, QWORD PTR [rax + 0x60]nt"
"mov rax, QWORD PTR [rax + 0x18]nt"
"movq rax, %0n" //mov rax, QWORD PTR [%0]n
: "=r" (ptr) ::
);
它们不打印与 AT&T 语法相同的值:0x7fff5c4ff3c0
有什么想法吗?
您忘记在最后一行反转操作数顺序。也就是说,由于gs
段覆盖,您在asm中唯一需要的指令是第一个指令,其余的可以在C中完成。
相关文章:
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 将gsl c++程序与"英特尔MKL"链接
- 使用英特尔 PIN 修改寄存器
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何要求 macports 用英特尔编译器包装 openmpi?
- 实施英特尔实感和 SDL2 时出现问题
- OpenGL 片段着色器未在英特尔 HD 4000 显卡上编译
- 英特尔将指令存储在重叠的内存区域
- 如何指示 CMAKE 在 Visual Studio 中使用英特尔 MKL
- 使用英特尔内部函数 (AVX) 中的混合说明
- 英特尔 PIN:如何查看推测性指令?
- 我正在尝试解决英特尔架构并行基础课程中关于 Coursera 的一项作业
- 使用 task_group 的英特尔线程构建模块性能不佳(新用户)
- 将 AT&T 语法转换为英特尔语法 (ASM)
- 如何访问一个字符从asm在c中,使用asm英特尔语法