safebuffers

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Específicos de Microsoft

Indica al compilador que no inserte comprobaciones de seguridad de saturación del búfer para una función.

__declspec( safebuffers )  

La opción del compilador /GS hace que el compilador compruebe las saturaciones del búfer mediante la inserción de comprobaciones de seguridad en la pila. Los tipos de estructuras de datos que son aptos para las comprobaciones de seguridad se describen en /GS (Comprobación de seguridad del búfer). Para obtener más información sobre la detección de saturación del búfer, vea Comprobación de seguridad exhaustiva del compilador en el sitio web de MSDN.

Un análisis manual externo o realizado por un experto para revisar el código puede determinar si una función está protegida de la saturación del búfer. En ese caso, se pueden suprimir las comprobaciones de seguridad de una función mediante la aplicación de la palabra clave __declspec(safebuffers) en la declaración de función.

System_CAPS_ICON_caution.jpg Precaución

Las comprobaciones de seguridad del búfer proporcionan una protección de seguridad importante y apenas repercuten en el rendimiento. Por tanto, se recomienda que no las suprima, excepto en el caso poco frecuente de que el rendimiento de una función tenga una importancia crítica y se sepa que la función está segura.

Una función principal puede utilizar una palabra clave inlining para insertar una copia de una función secundaria. Si la palabra clave __declspec(safebuffers) se aplica a una función, la detección de saturación del búfer se suprime para esa función. Sin embargo, inlining afecta a la palabra clave __declspec(safebuffers) de las maneras siguientes.

Supongamos que la opción del compilador /GS está especificada para ambas funciones pero la función principal especifica la palabra clave __declspec(safebuffers) . Las estructuras de datos en la función secundaria hacen que sea apta para las comprobaciones de seguridad, y la función no suprime dichas comprobaciones. En este caso:

  • Especifique la palabra clave __forceinline en la función secundaria para hacer que el compilador inserte esa función independientemente de las optimizaciones del compilador.

  • Dado que la función secundaria es apta para las comprobaciones de seguridad, las comprobaciones de seguridad también se aplican a la función principal, aunque especifique la palabra clave __declspec(safebuffers) .

En el código siguiente se muestra cómo se puede usar la palabra clave __declspec(safebuffers) .

// compile with: /c /GS  
typedef struct {  
    int x[20];  
} BUFFER;  
static int checkBuffers() {  
    BUFFER cb;  
    // Use the buffer...  
    return 0;  
};  
static __declspec(safebuffers)   
    int noCheckBuffers() {  
    BUFFER ncb;  
    // Use the buffer...  
    return 0;  
}  
int wmain() {  
    checkBuffers();  
    noCheckBuffers();  
    return 0;  
}  

FIN de Específicos de Microsoft

__declspec
Palabras clave de C++
inline, __inline, __forceinline
strict_gs_check

Mostrar: