Я пытался разместить свой код в двух разделах, первый был разделом .code, а другой - разделом .stub. Это работает следующим образом:
1- Основная функция находится в разделе .stub
2- функция теста помещена в секцию .code
3- Main начинается с (.stub) и вызывает testfunction () из (.code). Вот код:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
#include <string>
/* Declare .code as a read/write/execute segment */
#pragma section(".code",execute, read, write)
#pragma comment(linker,"/SECTION:.code,ERW")
/* .code segment begin (all generated executable code below will go in .code segment ) */
#pragma code_seg(".code")
void testfunction() { printf("IAM now in .code\n"); }
/*=======================================================================*/
// .stub SECTION
#pragma section(".stub", execute, read, write)
#pragma code_seg(".stub")
void _tmain()
{
cout<<"I am main from .stup section\n";
testfunction();
return ;
}
Без iostream, строки и пространства имен std все хорошо. Проблема начинается, когда я пытаюсь #include и сразу после stdafx.h
Приходит следующая ошибка:
Error 7 error C2193: 'void __cdecl `dynamic atexit destructor for 'public: static std::_Generic_error_category std::_Error_objects<int>::_Generic_object''(void)' : already in a segment C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0 627 1
Error 6 error C2193: 'void __cdecl `dynamic atexit destructor for 'public: static std::_Iostream_error_category std::_Error_objects<int>::_Iostream_object''(void)' : already in a segment C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0 627 1
Error 5 error C2193: 'void __cdecl `dynamic atexit destructor for 'public: static std::_System_error_category std::_Error_objects<int>::_System_object''(void)' : already in a segment C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0 627 1 mal
При поиске ошибки C2193 я обнаружил, что она появляется, когда функция находится во многих разделах. Зная это, я переместил iostream, string и namespace std в раздел .stub. Теперь все работает. Я пришел к выводу, что включение он-лайн делает его включенным во весь следующий раздел!
Теперь, мой вопрос
Как сделать включение только в одном разделе? (При условии, что
мой вывод правильный).
Если так, то почему windows.h не сделал ту же ошибку?
Я надеюсь найти ответ как можно скорее.