0

我正在尝试使用结构内的 asm 语法声明静态 const 数据。

也许是这样的?

struct Z
{
  public:
    static char hello[] = asm volatile(".ascii \"Hello\"");
};

请注意,这甚至没有接近工作。:) 我的组件超级生锈。

编辑:

对于那些对此问题及其背后的原因感兴趣的人,请参阅在 C++ 中存储非 nul 终止的 C 字符串常量

这个问题是切题的,我不想把这个问题弄得乱七八糟,因为它可能有超出我想要它的其他用途,这就是我开始一个单独的问题的原因。

感谢您的关注和帮助。

4

3 回答 3

3

不,不是这样的。但是,如果您的编译器支持,您可以进行内联汇编。另一种常见的(同样也是不可移植的)技术是使用汇编器将代码汇编为原始机器代码,然后将其包装成字节数组(您可以在各种类型的 shellcode 中看到这一点,其中有效负载存储如下)。

于 2013-05-10T16:58:11.810 回答
2

您的评论说您要“生成一串不以空值终止的字节”。很简单,用

char hello[] = { 'H', 'e', 'l', 'l', 'o' };
于 2013-05-10T17:10:13.800 回答
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
于 2013-05-10T17:17:05.270 回答