参数传递为__declspec(裸)的g ++等价物如何工作?

时间:2011-08-12 18:44:33

标签: assembly g++

我目前正在修改在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年末英特尔酷睿2双核2.66 GHz运行OS X Lion

当前编译说明:

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

1 个答案:

答案 0 :(得分:0)

来自GNU documentation

  


  在ARM,AVR,MCORE,RX和SPU端口上使用此属性可指示指定的函数不需要编译器生成的序言/结尾序列。

x86或x86-64目前不支持

__attribute__((naked))