问题标签 [att]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2996 浏览

c++ - 使用带有汇编的 C++ 在运行时分配和创建新函数

我一直在研究一个(C++)项目,它需要完全动态分配的函数,这意味着 malloc/new 和 mprotect 然后手动修改缓冲区以汇编代码。因此,我确切地想知道,我的这个“缓冲区”需要什么,才能复制任何其他 _cdecl 函数。例如:

如果我想从字面上创建这个函数的副本,但完全是动态的,那需要什么(记住它是带有内联汇编的 C++)?对于初学者,我想我必须做这样的事情(或类似的解决方案):

在此之后,我将不得不找出ImAcDeclFunc(int a, int b);. 现在我在汇编方面仍然很糟糕,那么这个函数在 AT&T 语法中的表现如何呢?这是我的大胆尝试:

现在如果这个代码是正确的(我非常怀疑,请纠正我)我只需要找到这个代码的十六进制值(例如,'jmp' 是 0xE9 和 'inc' 是 0xFE),并直接使用这些值C++?如果我继续我以前的 C++ 代码:

在我为整个代码/缓冲区完成此操作后,对于完全动态的 _cdecl 函数是否足够(即我可以将它转换为函数指针并执行int result = ((int (*)(int, int))ImAcDeclFunc)(firstArg, secondArg)?)。而且我对使用 boost::function 或类似的东西不感兴趣,我需要该函数是完全动态的,因此我感兴趣:)

注意:这个问题是我上一个问题的延续,但有更多细节。

0 投票
2 回答
1644 浏览

assembly - 为什么 gnu 链接器的 `--oformat binary' 选项将 `.data' 段放置在 0x0200000

我一直在为 i386 实模式编写一些“独立”代码,并在 PXE 网络引导我的代码时遇到了一些奇怪的错误:

在摆弄了我的二进制文件之后,我将其隔离

段标记。

在 hexdumping 之后,我发现 ld 将指令一直移动到0x0200000所有地方。

我目前正在生成我的平板箱:


问题:

  1. 为什么这样ld做?

  2. 这是特定于oformat选项吗?

0 投票
2 回答
1941 浏览

c - 关于 AT&T 汇编语法 (%esp,1)

当我阅读一些反汇编代码时,由于我不了解 AT&T 语法,我不知道 (%esp,1) 之类的代码是什么意思。

有人可以告诉它是什么意思吗?谢谢!

0 投票
0 回答
1093 浏览

macos - 内联汇编 - AT&T 语法 - LLVM 编译错误(虽然不是 w/GCC)

所以我试图在我的 Objective-C 可执行文件中包含这个程序集:

如果我使用 GCC 编译器,它编译得很好,但是在使用上述函数返回时,由于 GCC 抛出了一个很好的 ud2a 指令而不是在编译时抛出一个错误(在 gdb 中捕获),所以会抛出一个错误。

如果我使用 Apple LLVM 编译器,它会对我大喊“push %[a4]\n\t”这行错误:“Unknown use of instruction mnemonic without a size suffix”

有谁知道这意味着什么?我完全不知道如何调整上述内容才能正常运行。

注意:这是它试图做的:将 a5、a4 压入堆栈。将 FuncPtr 移至 ebx,将 MyVal 移至 eax,将 MyVal2 移至 edx,将 MyVal3 移至 ecx,然后调用 ebx。

0 投票
1 回答
1117 浏览

assembly - 从标准输入将数字读入寄存器?加载 scanf 结果

我目前正忙于组装并遇到以下问题:

我正在尝试获取已输入 eax 寄存器的数字。首先我提出一个要求输入的字符串,然后有人必须输入一个数字。

我使用了以下代码,但我并不理解它的每一点。请注意代码中的注释。

我知道这个数字现在绝对没有任何反应,除了它已被移入 eax。我想知道的是为什么我必须使用 leal:它为什么以及它的作用是什么?为什么我需要将 eax 推回堆栈?

0 投票
2 回答
16528 浏览

string - 在 x86 程序集中附加两个字符串

我目前正在处理 AT&T Assembly 的任务,现在我必须附加两个字符串:

我真的不知道如何做到这一点或如何开始。我已经在互联网上搜索过,但找不到任何有用的信息。我想我必须手动将第二个字符串的字符复制到第一个字符串的末尾,但我不确定。

谁能向我解释如何做到这一点?:)

0 投票
1 回答
187 浏览

assembly - 跳转不起作用

我目前正忙于在装配 (AT&T) 中做一个小测验(到目前为止有固定的问题)。

我设计了一个小菜单,要求输入 1 2 或 3
问题是我的 cmpl 没有完成它的工作,我不知道为什么。它只是退出,不管输入是什么。

下面是我的一些代码:

0 投票
1 回答
2094 浏览

assembly - 装配中的 Strcat

我试图在 Assembly 中连接两个字符串,但我似乎无法让它工作。我有以下代码:

当我尝试将超过 16 个字符的字符串附加到另一个字符串时,它会根据 gdb 在 strcat 调用中给出分段错误。我在这里错过了什么吗?有没有办法让 strcat 处理超过 16 个字符的字符串?

谢谢!

0 投票
0 回答
103 浏览

linux - 在程序集中定位独立库(AT&T 语法)

我正在实现一个兼容性库,它应该将某些函数调用重定向到一个不同命名的函数,通常在 glibc 中。

这就是我所做的:

问题是它不是位置独立的代码,并且链接器拒绝链接库。我知道我需要让 GOT 参与其中,但现在知道如何(在 AT&T asm 语法中)。

谢谢!

0 投票
1 回答
7078 浏览

assembly - 在 x86 程序集中创建和调用函数(AT&T 语法)

请给我一个非常简单的例子来创建一个函数并在 x86 汇编(AT&T 语法)中调用它。实际上,我正在尝试创建一个计算factorial数字的函数。这就是我所做的一切:

Segmentation Fault一次又一次地收到错误。我正在使用GASUbuntu