This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: problem with i686-w64-mingw32-gcc -fstack-protector-all
- From: Lee <ler762 at gmail dot com>
- To: cygwin at cygwin dot com
- Date: Thu, 5 Oct 2017 01:40:55 -0400
- Subject: Re: problem with i686-w64-mingw32-gcc -fstack-protector-all
- Authentication-results: sourceware.org; auth=none
- References: <CAD8GWsuRTR2asWX2zNnYJWj2EwbTVjqb=kx4kh2XxnO4OmW4jg@mail.gmail.com> <1d6ce5fb-ea05-b830-8096-98d839cc6e02@t-online.de>
On 10/4/17, Christian Franke wrote:
> Lee wrote:
>> Maybe I'm just Doing It Wrong, but
>> gcc -fstack-protector-all
>> seems to be working correctly &
>> i686-w64-mingw32-gcc -fstack-protector-all
>> seems to be broken - eg:
>>
>> $./ssp testtestx
>> Illegal instruction
>>
>> printf's that happen before the stack over-write don't show up & no
>> "*** stack smashing detected ***" msg is printed before the "Illegal
>> instruction"
>> ...
>>
>> extern
>> int doit(char *s ) {
>> char buf[]="12345678";
>> int i=0;
>> if ( *s != '\0' ) i = 1; /* return true */
>> printf("doit: s=\"%s\" buf=\"%s\" i=%d\n", s, buf, i );
>> strcpy(buf, s);
>> /* buffer overflow into return status(int i) if strlen(s) > 8 */
>> printf("doit: s=\"%s\" buf=\"%s\" i=%d\n", s, buf, i );
>> return i;
>> }
>>
>> + i686-w64-mingw32-gcc -c -fstack-protector-all func-ssp.c -o func-ssp.o
>> + i686-w64-mingw32-gcc -c -fstack-protector-all main-ssp.c -o main-ssp.o
>> + i686-w64-mingw32-gcc -static -o ssp.exe func-ssp.o main-ssp.o -lssp
>
> BTW: There is no need to link with -lssp if the related code generation
> option -fstack-protector* is also used during link.
Thanks for that!
I would have never guessed that a compile-time switch would have an
effect if all you're doing is linking.
>> + ./ssp.exe testtestx
>> ./doit: line 11: 9128 Illegal instruction ./ssp.exe testtestx
>> + echo -e '\n\n'
>>
>
> The *** stack smashing detected *** message from MinGW runtime is only
> visible if stdio is attached to a Windows console.
Yes!
But even after re-reading https://github.com/mintty/mintty/wiki/Tips &
https://github.com/mintty/mintty/issues/56 I'm still missing why _no_
output is displayed before the 'Illegal instruction' output line.
Without a stack overflow I see:
$ ./ssp test
main: argv[1]=test
doit: s="test" buf="12345678" i=1
doit: s="test" buf="test" i=1
main: exit
so it seems like I should have gotten at least the first two lines of output.
> Works for me if one more overflow char is added:
>
> Cygwin mintty:
>
> $ ./ssp testtestx
> main: argv[1]=testtestx
> doit: s="testtestx" buf="12345678" i=1
> doit: s="testtestx" buf="testtestx" i=1
> main: exit
Interesting. I have Windows 10 & i686-w64-mingw32-gcc (GCC) 6.3.0 you?
> $ ./ssp testtestxx
> Illegal instruction
>
>
> Cygwin in Windows console (cygwin.bat):
>
> $ ./ssp testtestxx
> main: argv[1]=testtestxx
> doit: s="testtestxx" buf="12345678" i=1
> doit: s="testtestxx" buf="testtestxx" i=1
> *** stack smashing detected ***: terminated
> Illegal instruction
>
>
> cmd.exe in Windows console:
>
> C:\cygwin\tmp>.\ssp.exe testtestxx
> main: argv[1]=testtestxx
> doit: s="testtestxx" buf="12345678" i=1
> doit: s="testtestxx" buf="testtestxx" i=1
> *** stack smashing detected ***: terminated
> [Windows Message Box: Debug/Abort Program ?]
I get the same with the cygwin.bat console window; a straight dos
(cmd.exe) console window has a 10 second delay after
*** stack smashing detected ***: terminated
is displayed before I get the
------------------------
ssp.exe has stopped working
A problem caused the program to stop working
correctly. Please close the program.
-> Close the program
------------------------
pop-up window
Anyway.. Thank you!! It's been driving me nuts trying to figure out
why all I get is 'Illegal instruction'
Lee
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple