我正在尝试使用结构中的asm语法声明静态const数据。
也许是这样的?
struct Z
{
public:
static char hello[] = asm volatile(".ascii \"Hello\"");
};
请注意,这甚至不接近工作。 :)我的装配超级生锈。
修改
对于对此问题感兴趣的人及其背后的原因,请参阅store non-nul terminated C string constant in C++。
这个问题是切合实际的,我不想把这个问题弄得一团糟,除了我想要它之外还有其他用途,这就是为什么我开始一个单独的问题。
感谢您的关注和帮助。
答案 0 :(得分:3)
不,不是这样的。但是,如果编译器支持内联汇编,则可以进行内联汇编。另一种常见的(同样是非便携式)技术是使用汇编程序将代码组装到原始机器代码,然后将其包装到字节数组中(您可以在各种shellcode中看到这种情况,其中有效负载存储如下)。
答案 1 :(得分:2)
你评论说你想“生成一个非空终止字节的字符串”。 这很简单,使用
char hello[] = { 'H', 'e', 'l', 'l', 'o' };
答案 2 :(得分:2)
假设您知道(或可以计算)字符串的大小:
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 "=%zd\n", 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