在编译时使用数组中的字符串进行编译

时间:2019-10-01 13:02:21

标签: c++ visual-studio

#pragma code_seg(push, ".text$EBC000")

code_seg prama更改.text节中的功能顺序。我希望有一个像CHANGE_FUNCTION_ORDER这样的通用宏,它每次使用__COUNTER__宏来获取将用于code_seg pragma的不同字符串。

const char *array = {".text$EBC002", ".text$EBC000", ".text$EBC003"};
#define CHANGE_FUNCTION_ORDER __pragma(code_seg(push, ????)) // how do I tell compiler to use string at __ COUNTER__ index from array

这个想法来自http://lallouslab.net/2018/03/26/shuffling-function-addresses-in-c-c-with-msvc/

1 个答案:

答案 0 :(得分:2)

这是使用Boost.Preprocessor的解决方案:

#include <boost/preprocessor/tuple/elem.hpp>

#define CODE_SEGMENTS (".text$EBC002", ".text$EBC000", ".text$EBC003")
#define CHANGE_FUNCTION_ORDER __pragma(code_seg(push, BOOST_PP_TUPLE_ELEM(__COUNTER__, CODE_SEGMENTS))

See it live on Coliru