2014-01-14 3 views
-1

Итак, я пишу обертку для основного и все еще предоставляю основные функции, поэтому пользователь может определить int main() или int main (argc, argv), и оба работают нормально. Я могу сделать это для некоторых компиляторов с встроенной сборкой с нажатием argc & argv на стек перед вызовом основного пользователя. Однако для x64 VC++ нет встроенной сборки, поэтому любые предложения о том, как я могу это достичь?Назначение функции вызова x64 VC++

Спасибо!

+0

Что? Как вы можете «обернуть» «главное»? Вызов главного пользователя? : S – Brandon

+0

Почему оболочка должна быть записана в сборке? Просто напишите обертку в C и пусть компилятор выполнит эту работу. тем более, что соглашение о вызове x64 не передает параметры в стеке. Для этого также требуются коды отмены. –

+0

@CantChooseUsernames: по крайней мере один главный компилятор (gcc) определяет функцию обертки, которая вызывает ваш 'main' (см., Например, http://learningpearls.blogspot.de/2011/02/start-function-inside-c.html). Это может быть полезно знать, когда выжимаете последние байты из своей программы. –

ответ

1

Я вижу два очевидных варианта: либо написать свой код на языке ассемблера, содержащийся в файле на ассемблере, либо написать свой код в C++ без встроенного ассемблера:

void my_entry_point() { 
    int argc = foo(); 
    int argv = bar(); 
    int ret = main(argc, argv); 
    exit_to_os(ret); 
} 
+0

doh так погружен в inline, что не разрешено, что я забыл простой старый ASM hah – user1181950

Смежные вопросы