【问题标题】:C program new segment declarationC程序新段声明
【发布时间】:2019-02-06 08:40:06
【问题描述】:

我有这个简单的代码测试代码:

#include <Windows.h>
#include <stdio.h>

/* Declare new sections to store encrypted code and shellcode data */
#pragma section(".code", execute, read, write)
#pragma comment(linker,"/SECTION:.code,ERW")

// From here executable code will go in .code section
#pragma code_seg(".code")


int test()
{
    printf("prova");
    return 0;
}

// .stub SECTION
#pragma section(".stub", execute, read, write)
#pragma code_seg(".stub")

int main(int argc, char *argv[]){
    test(); /* Call function which executes shellcode now that it is decrypted */
    return 0;
}

谁能告诉我为什么如果我转储这个文件我只得到这个默认部分:

  • .数据
  • .rdata
  • .reloc
  • .rsrc
  • .stub
  • .text

未生成的 .code 段。我想我曾经在一些以前的项目中这样做过,我做错了什么吗?

-- 进一步测试--

  • 转储.obj 文件,显示.code 部分。
  • .stub 显示倾销 .exe.obj
  • 删除 #pragma comment(linker,"/SECTION:.code,ERW") 无效
  • 添加#pragma comment(linker,"/SECTION:.stub,ERW") 并没有改变.exe 上的dumpbin 结果,.stub 仍然显示
  • 将名称从 .code 更改为 .somethingelse 也无效,结果相同

【问题讨论】:

  • 你是在转储可执行文件还是目标文件?
  • 我正在转储 .exe
  • 无论如何都会创建 .stub @Someprogrammerdude
  • 很遗憾,我无法进一步帮助您。请编辑您的问题以包含这些实验的结果,希望更有知识的人能够帮助您。
  • /MAP 添加到链接器选项,这将提供最多信息。但是#pragma code_seg(".code") 被排除在外

标签: c header portable-executable segment dumpbin


【解决方案1】:

使用以下指令,我能够将所有代码/变量/成本限制在使用 dubin 命令可见的 .code 段中。

#pragma section(".code", execute, read)
#pragma section(".codedata", read, write)
#pragma comment(linker,"/SECTION:.code,ERW")
#pragma comment(linker,"/SECTION:.codedata,ERW")
#pragma comment(linker, "/MERGE:.codedata=.code")

#pragma code_seg(".code")
#pragma data_seg(".codedata")
#pragma const_seg(".codedata")

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多