节区

runwu2204 Lv6

MSVC

通过#pragma code_seg(".节区名")定义节区留空则为默认节区

注意其影响范围为下面所有所以需要在切换节区时使用#pragma code_seg()中断这个节区的定义

通过#pragma comment(linker, "/SECTION:.节区名,权限")定义节区权限

权限有

E 执行

R 读取

W 写入

具体操作

1
2
3
4
5
6
7
8
#pragma code_seg(".SMF")
void Fun()
{
char flag[] = "flag{this_is_test}";
printf("%s", flag);
}
#pragma comment(linker, "/SECTION:.SMF,ERW")
#pragma code_seg()

注意,msvc会将带有可执行权限的第一个节区作为start的位置(可以不是.text段)如此处为SMF则它会被当作第一个

gcc

__attribute__((section(".段名")))即可,权限需要手动更改ld文件或者手动更改IMAGE_SECTION_HEADER SectionHeaders内的段权限

1
2
3
4
5
6
__attribute__((section(".SMC")))
int func()
{
printf("123456");
return 0;
}
  • 标题: 节区
  • 作者: runwu2204
  • 创建于 : 2024-08-07 00:54:32
  • 更新于 : 2024-10-09 00:57:01
  • 链接: https://runwu2204.github.io/2024/08/07/开发/C-C++/节区/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
节区