Hello,

Following code (written just for fun) leads to:

Program received signal SIGSEGV, Segmentation fault.
main () at main-general.cpp:95
95              printf("%d\n", x_reg);


BTW, there is warning when using ecx, eax, edx.
should there be any warning for esp?

GCC 4.4
X86

Compile flags: -g3 -O2
---

volatile register int x_reg asm ("esp");

int ff_()
{
        x_reg = rand();
        return x_reg;
}


int main()
{
        x_reg = ff_();
        x_reg++;
        printf("%d\n", x_reg);
        
        return 1;
}


Dump of assembler code for function _Z3ff_v:
0x080489c0 <_Z3ff_v+0>: push   %ebp
0x080489c1 <_Z3ff_v+1>: mov    %esp,%ebp
0x080489c3 <_Z3ff_v+3>: sub    $0x8,%esp
0x080489c6 <_Z3ff_v+6>: call   0x80487a4 <r...@plt>
0x080489cb <_Z3ff_v+11>:        mov    %eax,%esp
0x080489cd <_Z3ff_v+13>:        mov    %esp,%eax
0x080489cf <_Z3ff_v+15>:        leave  
0x080489d0 <_Z3ff_v+16>:        ret

(gdb) disassemble main
Dump of assembler code for function main:
0x080489e0 <main+0>:    push   %ebp
0x080489e1 <main+1>:    mov    %esp,%ebp
0x080489e3 <main+3>:    and    $0xfffffff0,%esp
0x080489e6 <main+6>:    sub    $0x10,%esp
0x080489e9 <main+9>:    call   0x80489c0 <_Z3ff_v>
0x080489ee <main+14>:   lea    0x1(%eax),%esp
0x080489f1 <main+17>:   mov    %esp,0x4(%esp)
0x080489f5 <main+21>:   movl   $0x8048bd0,(%esp)
0x080489fc <main+28>:   call   0x8048774 <pri...@plt>           <<
0x08048a01 <main+33>:   mov    $0x1,%eax
0x08048a06 <main+38>:   leave  
0x08048a07 <main+39>:   ret    



        Sergey

Attachment: signature.asc
Description: Digital signature

Reply via email to