Proper make clean - added deletion of detach code
[retty.git] / attach.S
blobd42a2fffeddbfae7f5a3a55ee1b4be580bb9745d
1 /* This is bytecode inserted on the stack of the attached application. */
2 /* When you modify it, check that the length is dword-aligned. */
5         .equ    SYS_open,       5
6         .equ    SYS_close,      6
7         .equ    SYS_getpid,     20
8         .equ    SYS_kill,       37
9         .equ    SYS_dup,        41
10         .equ    SYS_ioctl,      54
11         .equ    SYS_dup2,       63
13         .equ    O_RDWR,         02
15         .equ    TCGETS,         0x5401
16         .equ    TCSETS,         0x5402
18         .equ    SIGWINCH,       28
20         .equ    sizeof_termios, 60
22         .file   "attach.S"
23         .text
24 attach:
25         nop
26         nop
27         nop
28         nop
29         nop
30         nop
31         nop
32         nop
33         nop
34         nop
35         nop
36         nop
37         nop
38         nop
39         nop
40         nop
42         pusha
43         push    %ebp
44         mov     %esp, %ebp
45         sub     $sizeof_termios, %esp
47         mov     $SYS_open, %eax
48         mov     0x24(%ebp), %ebx
49         mov     $O_RDWR, %ecx
50         int     $0x80
51         push    %eax    /* fd of the terminal */
53         mov     $SYS_dup, %eax
54         mov     $0x0, %ebx
55         int     $0x80
56         push    %eax    /* old stdin */
58         mov     $SYS_dup, %eax
59         mov     $0x1, %ebx
60         int     $0x80
61         push    %eax    /* old stdout */
63         mov     $SYS_dup, %eax
64         mov     $0x2, %ebx
65         int     $0x80
66         push    %eax    /* old stderr */
68         mov     $SYS_close, %eax
69         mov     $0x0, %ebx
70         int     $0x80
72         mov     $SYS_close, %eax
73         mov     $0x1, %ebx
74         int     $0x80
76         mov     $SYS_close, %eax
77         mov     $0x2, %ebx
78         int     $0x80
81         mov     0xc(%esp), %ebx /* pts fd */
83         mov     $SYS_dup2, %eax
84         mov     $0x0, %ecx
85         int     $0x80
87         mov     $SYS_dup2, %eax
88         mov     $0x1, %ecx
89         int     $0x80
91         mov     $SYS_dup2, %eax
92         mov     $0x2, %ecx
93         int     $0x80
96         /* From now on, NO %esp MANIPULATION PERMITTED!
97            We will look back at the stack from the retty process. ;-) */
100         mov     $SYS_ioctl, %eax
101         mov     (%esp), %ebx
102         mov     $TCGETS, %ecx
103         lea     -sizeof_termios(%ebp), %edx
104         int     $0x80
106         mov     $SYS_ioctl, %eax
107         mov     $2, %ebx
108         mov     $TCSETS, %ecx
109         lea     -sizeof_termios(%ebp), %edx
110         int     $0x80
113         mov     $SYS_ioctl, %eax
114         mov     0x4(%esp), %ebx
115         mov     $TCGETS, %ecx
116         lea     -sizeof_termios(%ebp), %edx
117         int     $0x80
119         mov     $SYS_ioctl, %eax
120         mov     $1, %ebx
121         mov     $TCSETS, %ecx
122         lea     -sizeof_termios(%ebp), %edx
123         int     $0x80
126         mov     $SYS_ioctl, %eax
127         mov     0x8(%esp), %ebx
128         mov     $TCGETS, %ecx
129         lea     -sizeof_termios(%ebp), %edx
130         int     $0x80
132         mov     $SYS_ioctl, %eax
133         mov     $0, %ebx
134         mov     $TCSETS, %ecx
135         lea     -sizeof_termios(%ebp), %edx
136         int     $0x80
139         mov     $SYS_close, %eax
140         mov     0xc(%esp), %ebx
141         int     $0x80
144         mov     $SYS_getpid, %eax
145         int     $0x80
147         mov     %eax, %ebx
148         mov     $SYS_kill, %eax
149         mov     $SIGWINCH, %ecx
150         int     $0x80
152         nop
154         leave
155         popa
157         /* The value will be rewritten */
158         add     $0x12000000, %esp
160         ret