【发布时间】:2021-10-14 03:32:08
【问题描述】:
是否有使用宏定义字符堆栈数组的快捷方式(例如 MACRO/模板)?
我需要一个 char by char 定义来强制 MS 编译器将数组就地构造到堆栈帧中。这对于 shellcoding 目的是必需的,避免手动逐个字符写入每个字符串。
例如使用宏
#define MACRO(arr, s) ...
int main()
{
MACRO(arr, thisisasuperlongstring);
}
获得
int main()
{
char arr[] = {'t','h','i','s','i','s','a','s','u','p','e','r','l','o','n','g','s','t','r','i','n','g',0};
}
【问题讨论】:
-
简单地定义一个数组可能有效,但我认为您不能指定编译器应如何以标准方式在内部表达字符串。 gcc.godbolt.org/z/316cqTar6
-
这会实现
char arr[] = "thisisasuperlongstring";不会实现的什么? -
你这样做:
char arr[] = "thisisasuperlongstring";没有宏。 -
@wmi: "我想避免将字符串留在 .rdata 部分" 它仍将作为字符数组存在于您的可执行文件中。如果你想隐藏一些文本,这并不是特别有效。
-
无论您使用
= "..."还是= {...}初始化数组,编译器都会以相同的方式处理它。
标签: c++ visual-c++ c++14