Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um módulo neste aplicativo está inicializando o cookie de segurança global do módulo enquanto uma função que depende desse cookie de segurança está ativa. Ligue __security_init_cookie antes.
Observações
__security_init_cookie deve ser chamado antes do primeiro uso do cookie de segurança global.
O cookie de segurança global é usado para proteção contra saturação de buffer em código compilado com /GS (Buffer Security Check) e em código que usa tratamento estruturado de exceções. Essencialmente, na entrada para uma função protegida contra saturação, o cookie é colocado na pilha e, ao sair, o valor na pilha é comparado com o cookie global. Qualquer diferença entre eles indica que ocorreu uma saturação de buffer e resulta no encerramento imediato do programa.
O erro R6035 indica que foi feita uma chamada para __security_init_cookie depois de ter sido introduzida uma função protegida. Se a execução continuasse, uma saturação de buffer espúrio seria detetada porque o cookie na pilha não corresponderia mais ao cookie global.
Example
Considere o seguinte exemplo de DLL. O ponto de entrada DLL é definido como DllEntryPoint através do vinculador /ENTRY (Entry-Point Symbol) opção. Isso ignora a inicialização do CRT, que normalmente inicializaria o cookie de segurança global, portanto, a própria DLL deve chamar __security_init_cookie.
// Wrong way to call __security_init_cookie
DllEntryPoint(...) {
DllInitialize();
...
__try {
...
} __except()... {
...
}
}
void DllInitialize() {
__security_init_cookie();
}
Este exemplo gerará o erro R6035 porque DllEntryPoint usa tratamento de exceção estruturado e, portanto, usa o cookie de segurança para detetar saturações de buffer. No momento em que a função DllInitialize é chamada, o cookie de segurança global já foi colocado na pilha.
A maneira correta é demonstrada neste exemplo:
// Correct way to call __security_init_cookie
DllEntryPoint(...) {
__security_init_cookie();
DllEntryHelper();
}
void DllEntryHelper() {
...
__try {
...
} __except()... {
...
}
}
Nesse caso, DllEntryPoint não está protegido contra saturações de buffer (ele não tem buffers de cadeia de caracteres locais e não usa manipulação de exceção estruturada); portanto, ele pode chamar __security_init_cookiecom segurança . Em seguida, chama uma função auxiliar que está protegida.
Observação
A mensagem de erro R6035 só é gerada pela CRT de depuração x86 e apenas para tratamento de exceções estruturadas, mas a condição é um erro em todas as plataformas e para todas as formas de tratamento de exceções, como C++ EH.