File: attach.S

package info (click to toggle)
retty 1.0-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 96 kB
  • ctags: 54
  • sloc: ansic: 414; asm: 205; makefile: 42; perl: 24
file content (172 lines) | stat: -rw-r--r-- 2,329 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/* This is bytecode inserted on the stack of the attached application. */
/* When you modify it, check that the length is dword-aligned. */


	.equ	SYS_open,	5
	.equ	SYS_close,	6
	.equ	SYS_getpid,	20
	.equ	SYS_kill,	37
	.equ	SYS_dup,	41
	.equ	SYS_ioctl,	54
	.equ	SYS_dup2,	63

	.equ	O_RDWR,		02

	.equ	TCGETS,		0x5401
	.equ	TCSETS,		0x5402

	.equ	SIGWINCH,	28

	.equ	sizeof_termios,	60

	.file   "attach.S"
        .text
attach:
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop

	pusha
	push	%ebp
	mov	%esp, %ebp
	sub	$sizeof_termios, %esp

	mov	$SYS_open, %eax
	mov	0x24(%ebp), %ebx
	mov	$O_RDWR, %ecx
	int	$0x80
	push	%eax	/* fd of the terminal */

	mov	$SYS_dup, %eax
cervena:
	mov	$0x0, %ebx
	int	$0x80
	push	%eax	/* old stdin */

	mov	$SYS_dup, %eax
zelena:
	mov	$0x1, %ebx
	int	$0x80
	push	%eax	/* old stdout */

	mov	$SYS_dup, %eax
modra:
	mov	$0x2, %ebx
	int	$0x80
	push	%eax	/* old stderr */

	mov	$SYS_close, %eax
fialova:
	mov	$0x0, %ebx
	int	$0x80

	mov	$SYS_close, %eax
oranzova:
	mov	$0x1, %ebx
	int	$0x80

	mov	$SYS_close, %eax
bezova:
	mov	$0x2, %ebx
	int	$0x80


	mov	0xc(%esp), %ebx /* pts fd */

	mov	$SYS_dup2, %eax
zluta:
	mov	$0x0, %ecx
	int	$0x80

	mov	$SYS_dup2, %eax
bila:
	mov	$0x1, %ecx
	int	$0x80

	mov	$SYS_dup2, %eax
cerna:
	mov	$0x2, %ecx
	int	$0x80


	/* From now on, NO %esp MANIPULATION PERMITTED!
	   We will look back at the stack from the retty process. ;-) */


	mov	$SYS_ioctl, %eax
	mov	(%esp), %ebx
	mov 	$TCGETS, %ecx
	lea	-sizeof_termios(%ebp), %edx
	int	$0x80

	mov	$SYS_ioctl, %eax
hnusna:
	mov	$2, %ebx
	mov	$TCSETS, %ecx
	lea	-sizeof_termios(%ebp), %edx
	int	$0x80


	mov	$SYS_ioctl, %eax
	mov	0x4(%esp), %ebx
	mov	$TCGETS, %ecx
	lea	-sizeof_termios(%ebp), %edx
	int	$0x80

	mov	$SYS_ioctl, %eax
cokoladova:
	mov	$1, %ebx
	mov	$TCSETS, %ecx
	lea	-sizeof_termios(%ebp), %edx
	int	$0x80


	mov	$SYS_ioctl, %eax
	mov	0x8(%esp), %ebx
	mov	$TCGETS, %ecx
	lea	-sizeof_termios(%ebp), %edx
	int	$0x80

	mov	$SYS_ioctl, %eax
vanilkova:
	mov	$0, %ebx
	mov	$TCSETS, %ecx
	lea	-sizeof_termios(%ebp), %edx
	int	$0x80


	mov	$SYS_close, %eax
	mov	0xc(%esp), %ebx
	int	$0x80


	mov	$SYS_getpid, %eax
	int	$0x80

	mov	%eax, %ebx
	mov	$SYS_kill, %eax
	mov	$SIGWINCH, %ecx
	int	$0x80

	nop

	leave
	popa

	/* The value will be rewritten */
	add	$0x12000000, %esp

	ret