是否有可能在c++结构中编写静态汇编数据?
Is it possible to write static assembly data in C++ struct?
我试图在结构体内部使用asm语法声明静态const数据。
也许是这样的?
struct Z
{
public:
static char hello[] = asm volatile(".ascii "Hello"");
};
请注意,这甚至不接近工作。:)而且我的组装已经生锈了。
编辑:对于这个问题及其背后的原因感兴趣的人,请参阅在c++中存储非null终止的C字符串常量。
这个问题是切题的,我不想把这个问题和它混淆在一起,因为它可能有其他用途,这就是为什么我开始一个单独的问题。
谢谢你的关心和帮助。
不,不是这样的。但是,如果编译器支持内联汇编,则可以使用它。另一种常见的(同样不可移植的)技术是使用汇编器将代码汇编为原始机器码,然后将其包装到字节数组中(您可以在各种shellcode中看到这种操作,其中有效负载是这样存储的)。
您的注释说您想要"生成一个非null终止的字节字符串"。这很简单,使用
char hello[] = { 'H', 'e', 'l', 'l', 'o' };
假设您知道(或可以计算)字符串的大小:
char hello[5] = "Hello";
将完全按照您的要求执行。
你也可以使用宏,像这样:
#define STR(x, y) const char x[sizeof(y)-1] = y
这个对我有效:
#include <stdio.h>
#define STR(x, y) const char x[sizeof(y)-1] = y
STR(hello, "Hello");
STR(hello2, "Hello World");
STR(hello3, "Hello kerflunk");
#define PRINT(x) printf("size " #x "=%zdn", sizeof(x));
int main()
{
STR(bar, "Bar");
PRINT(hello);
PRINT(hello2);
PRINT(hello3);
PRINT(bar);
return 0;
}
输出:size hello=5
size hello2=11
size hello3=14
size bar=3
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- g++32位与64位汇编中的动态与静态链接差异
- 是否有可能在c++结构中编写静态汇编数据?