Как работает передача параметров для эквивалента g ++ для __declspec (naked)? - PullRequest
0 голосов
/ 12 августа 2011

В настоящее время я изменяю код, созданный в MS VS IDE, и одно из изменений, которое мне нужно сделать, - это изменение с __declspec (naked) на __attribute__ (( naked )).

Однако после внесения этого изменения программа выполняетневерный доступ и изменение параметров.

Передается ли параметр с использованием __attribute__ (( naked ))?

Вот код:

//Main file
#include <stdlib.h>
#include <stdio.h>

extern void test(int * arrayToSort, int size);


int main(int argc, char ** argv) {
    int * a = (int*) malloc (sizeof(int) * 10);

    int j;
    for (j=0; j<10; j++)
    {
        printf("a[%d]=",j);
        scanf("%d",a+j);
        printf("\n");
    }

    test(a, 10);

    for (j=0; j<10; j++)
    {
         printf("%d ", a[j]);
    }
    printf("\n");
}

//test code file
void test(int * array, int size)
{
    _asm {
        push edx
        push ecx
        push ebx
        push eax

        mov eax, dword ptr[esp+20] //*array
        mov ebx, dword ptr[esp+24] //size

        mov dword ptr[eax], 25 //array[0] = 25
        mov dword ptr[eax+4], ebx //array[1] = size

        pop eax
        pop ebx
        pop ecx
        pop edx
    }
}

Любая помощь очень ценится.

Технические характеристики системы:

MacBook Pro, конец 2009 г. Intel Core2 Duo 2,66 ГГц под управлением OS X Lion

Текущие инструкции по компиляции:

g++ -fomit-frame-pointer -m32 -fasm-blocks -o QS Test.cpp Main.cpp

1 Ответ

0 голосов
/ 12 августа 2011

Из документации GNU :

наг
Используйте этот атрибут на портах ARM, AVR, MCORE, RX и SPU, чтобы указать, что указанной функции не нужны последовательности пролога / эпилога, сгенерированные компилятором.

__attribute__((naked)) в настоящее время не поддерживается на x86 или x86-64.

...