C программа объявление нового сегмента - PullRequest
0 голосов
/ 31 августа 2018

у меня есть этот простой код проверки кода:

#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;
}

Может кто-нибудь сказать мне, почему, если я дам этот файл, я получил только этот раздел по умолчанию:

  • .data
  • .rdata
  • .reloc
  • .rsrc
  • .stub
  • .text

Сегмент .code не генерируется. Я думаю, что раньше делал это в каком-то предыдущем проекте, я делаю что-то не так?

- Дальнейшие испытания -

  • Дамп файла .obj показывает секцию .code.
  • .stub получает показанный дамп .exe или .obj
  • удаление #pragma comment(linker,"/SECTION:.code,ERW") не сработало
  • добавление #pragma comment(linker,"/SECTION:.stub,ERW") не изменило результат дампа на .exe, .stub все еще показывает
  • изменить имя с .code на .somethingelse тоже не сработало, тот же результат

1 Ответ

0 голосов
/ 12 сентября 2018

Используя следующие директивы, я смог ограничить весь код / ​​переменную / costant сегментом .code, который был виден с помощью команды dumbin.

#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")
...