metasm 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. data/BUGS +11 -0
  2. data/CREDITS +17 -0
  3. data/README +270 -0
  4. data/TODO +114 -0
  5. data/doc/code_organisation.txt +146 -0
  6. data/doc/const_missing.txt +16 -0
  7. data/doc/core_classes.txt +75 -0
  8. data/doc/feature_list.txt +53 -0
  9. data/doc/index.txt +59 -0
  10. data/doc/install_notes.txt +170 -0
  11. data/doc/style.css +3 -0
  12. data/doc/use_cases.txt +18 -0
  13. data/lib/metasm.rb +80 -0
  14. data/lib/metasm/arm.rb +12 -0
  15. data/lib/metasm/arm/debug.rb +39 -0
  16. data/lib/metasm/arm/decode.rb +167 -0
  17. data/lib/metasm/arm/encode.rb +77 -0
  18. data/lib/metasm/arm/main.rb +75 -0
  19. data/lib/metasm/arm/opcodes.rb +177 -0
  20. data/lib/metasm/arm/parse.rb +130 -0
  21. data/lib/metasm/arm/render.rb +55 -0
  22. data/lib/metasm/compile_c.rb +1457 -0
  23. data/lib/metasm/dalvik.rb +8 -0
  24. data/lib/metasm/dalvik/decode.rb +196 -0
  25. data/lib/metasm/dalvik/main.rb +60 -0
  26. data/lib/metasm/dalvik/opcodes.rb +366 -0
  27. data/lib/metasm/decode.rb +213 -0
  28. data/lib/metasm/decompile.rb +2659 -0
  29. data/lib/metasm/disassemble.rb +2068 -0
  30. data/lib/metasm/disassemble_api.rb +1280 -0
  31. data/lib/metasm/dynldr.rb +1329 -0
  32. data/lib/metasm/encode.rb +333 -0
  33. data/lib/metasm/exe_format/a_out.rb +194 -0
  34. data/lib/metasm/exe_format/autoexe.rb +82 -0
  35. data/lib/metasm/exe_format/bflt.rb +189 -0
  36. data/lib/metasm/exe_format/coff.rb +455 -0
  37. data/lib/metasm/exe_format/coff_decode.rb +901 -0
  38. data/lib/metasm/exe_format/coff_encode.rb +1078 -0
  39. data/lib/metasm/exe_format/dex.rb +457 -0
  40. data/lib/metasm/exe_format/dol.rb +145 -0
  41. data/lib/metasm/exe_format/elf.rb +923 -0
  42. data/lib/metasm/exe_format/elf_decode.rb +979 -0
  43. data/lib/metasm/exe_format/elf_encode.rb +1375 -0
  44. data/lib/metasm/exe_format/macho.rb +827 -0
  45. data/lib/metasm/exe_format/main.rb +228 -0
  46. data/lib/metasm/exe_format/mz.rb +164 -0
  47. data/lib/metasm/exe_format/nds.rb +172 -0
  48. data/lib/metasm/exe_format/pe.rb +437 -0
  49. data/lib/metasm/exe_format/serialstruct.rb +246 -0
  50. data/lib/metasm/exe_format/shellcode.rb +114 -0
  51. data/lib/metasm/exe_format/xcoff.rb +167 -0
  52. data/lib/metasm/gui.rb +23 -0
  53. data/lib/metasm/gui/cstruct.rb +373 -0
  54. data/lib/metasm/gui/dasm_coverage.rb +199 -0
  55. data/lib/metasm/gui/dasm_decomp.rb +369 -0
  56. data/lib/metasm/gui/dasm_funcgraph.rb +103 -0
  57. data/lib/metasm/gui/dasm_graph.rb +1354 -0
  58. data/lib/metasm/gui/dasm_hex.rb +543 -0
  59. data/lib/metasm/gui/dasm_listing.rb +599 -0
  60. data/lib/metasm/gui/dasm_main.rb +906 -0
  61. data/lib/metasm/gui/dasm_opcodes.rb +291 -0
  62. data/lib/metasm/gui/debug.rb +1228 -0
  63. data/lib/metasm/gui/gtk.rb +884 -0
  64. data/lib/metasm/gui/qt.rb +495 -0
  65. data/lib/metasm/gui/win32.rb +3004 -0
  66. data/lib/metasm/gui/x11.rb +621 -0
  67. data/lib/metasm/ia32.rb +14 -0
  68. data/lib/metasm/ia32/compile_c.rb +1523 -0
  69. data/lib/metasm/ia32/debug.rb +193 -0
  70. data/lib/metasm/ia32/decode.rb +1167 -0
  71. data/lib/metasm/ia32/decompile.rb +564 -0
  72. data/lib/metasm/ia32/encode.rb +314 -0
  73. data/lib/metasm/ia32/main.rb +233 -0
  74. data/lib/metasm/ia32/opcodes.rb +872 -0
  75. data/lib/metasm/ia32/parse.rb +327 -0
  76. data/lib/metasm/ia32/render.rb +91 -0
  77. data/lib/metasm/main.rb +1193 -0
  78. data/lib/metasm/mips.rb +11 -0
  79. data/lib/metasm/mips/compile_c.rb +7 -0
  80. data/lib/metasm/mips/decode.rb +253 -0
  81. data/lib/metasm/mips/encode.rb +51 -0
  82. data/lib/metasm/mips/main.rb +72 -0
  83. data/lib/metasm/mips/opcodes.rb +443 -0
  84. data/lib/metasm/mips/parse.rb +51 -0
  85. data/lib/metasm/mips/render.rb +43 -0
  86. data/lib/metasm/os/gnu_exports.rb +270 -0
  87. data/lib/metasm/os/linux.rb +1112 -0
  88. data/lib/metasm/os/main.rb +1686 -0
  89. data/lib/metasm/os/remote.rb +527 -0
  90. data/lib/metasm/os/windows.rb +2027 -0
  91. data/lib/metasm/os/windows_exports.rb +745 -0
  92. data/lib/metasm/parse.rb +876 -0
  93. data/lib/metasm/parse_c.rb +3938 -0
  94. data/lib/metasm/pic16c/decode.rb +42 -0
  95. data/lib/metasm/pic16c/main.rb +17 -0
  96. data/lib/metasm/pic16c/opcodes.rb +68 -0
  97. data/lib/metasm/ppc.rb +11 -0
  98. data/lib/metasm/ppc/decode.rb +264 -0
  99. data/lib/metasm/ppc/decompile.rb +251 -0
  100. data/lib/metasm/ppc/encode.rb +51 -0
  101. data/lib/metasm/ppc/main.rb +129 -0
  102. data/lib/metasm/ppc/opcodes.rb +410 -0
  103. data/lib/metasm/ppc/parse.rb +52 -0
  104. data/lib/metasm/preprocessor.rb +1277 -0
  105. data/lib/metasm/render.rb +130 -0
  106. data/lib/metasm/sh4.rb +8 -0
  107. data/lib/metasm/sh4/decode.rb +336 -0
  108. data/lib/metasm/sh4/main.rb +292 -0
  109. data/lib/metasm/sh4/opcodes.rb +381 -0
  110. data/lib/metasm/x86_64.rb +12 -0
  111. data/lib/metasm/x86_64/compile_c.rb +1025 -0
  112. data/lib/metasm/x86_64/debug.rb +59 -0
  113. data/lib/metasm/x86_64/decode.rb +268 -0
  114. data/lib/metasm/x86_64/encode.rb +264 -0
  115. data/lib/metasm/x86_64/main.rb +135 -0
  116. data/lib/metasm/x86_64/opcodes.rb +118 -0
  117. data/lib/metasm/x86_64/parse.rb +68 -0
  118. data/misc/bottleneck.rb +61 -0
  119. data/misc/cheader-findpppath.rb +58 -0
  120. data/misc/hexdiff.rb +74 -0
  121. data/misc/hexdump.rb +55 -0
  122. data/misc/metasm-all.rb +13 -0
  123. data/misc/objdiff.rb +47 -0
  124. data/misc/objscan.rb +40 -0
  125. data/misc/pdfparse.rb +661 -0
  126. data/misc/ppc_pdf2oplist.rb +192 -0
  127. data/misc/tcp_proxy_hex.rb +84 -0
  128. data/misc/txt2html.rb +440 -0
  129. data/samples/a.out.rb +31 -0
  130. data/samples/asmsyntax.rb +77 -0
  131. data/samples/bindiff.rb +555 -0
  132. data/samples/compilation-steps.rb +49 -0
  133. data/samples/cparser_makestackoffset.rb +55 -0
  134. data/samples/dasm-backtrack.rb +38 -0
  135. data/samples/dasmnavig.rb +318 -0
  136. data/samples/dbg-apihook.rb +228 -0
  137. data/samples/dbghelp.rb +143 -0
  138. data/samples/disassemble-gui.rb +102 -0
  139. data/samples/disassemble.rb +133 -0
  140. data/samples/dump_upx.rb +95 -0
  141. data/samples/dynamic_ruby.rb +1929 -0
  142. data/samples/elf_list_needed.rb +46 -0
  143. data/samples/elf_listexports.rb +33 -0
  144. data/samples/elfencode.rb +25 -0
  145. data/samples/exeencode.rb +128 -0
  146. data/samples/factorize-headers-elfimports.rb +77 -0
  147. data/samples/factorize-headers-peimports.rb +109 -0
  148. data/samples/factorize-headers.rb +43 -0
  149. data/samples/gdbclient.rb +583 -0
  150. data/samples/generate_libsigs.rb +102 -0
  151. data/samples/hotfix_gtk_dbg.rb +59 -0
  152. data/samples/install_win_env.rb +78 -0
  153. data/samples/lindebug.rb +924 -0
  154. data/samples/linux_injectsyscall.rb +95 -0
  155. data/samples/machoencode.rb +31 -0
  156. data/samples/metasm-shell.rb +91 -0
  157. data/samples/pe-hook.rb +69 -0
  158. data/samples/pe-ia32-cpuid.rb +203 -0
  159. data/samples/pe-mips.rb +35 -0
  160. data/samples/pe-shutdown.rb +78 -0
  161. data/samples/pe-testrelocs.rb +51 -0
  162. data/samples/pe-testrsrc.rb +24 -0
  163. data/samples/pe_listexports.rb +31 -0
  164. data/samples/peencode.rb +19 -0
  165. data/samples/peldr.rb +494 -0
  166. data/samples/preprocess-flatten.rb +19 -0
  167. data/samples/r0trace.rb +308 -0
  168. data/samples/rubstop.rb +399 -0
  169. data/samples/scan_pt_gnu_stack.rb +54 -0
  170. data/samples/scanpeexports.rb +62 -0
  171. data/samples/shellcode-c.rb +40 -0
  172. data/samples/shellcode-dynlink.rb +146 -0
  173. data/samples/source.asm +34 -0
  174. data/samples/struct_offset.rb +47 -0
  175. data/samples/testpe.rb +32 -0
  176. data/samples/testraw.rb +45 -0
  177. data/samples/win32genloader.rb +132 -0
  178. data/samples/win32hooker-advanced.rb +169 -0
  179. data/samples/win32hooker.rb +96 -0
  180. data/samples/win32livedasm.rb +33 -0
  181. data/samples/win32remotescan.rb +133 -0
  182. data/samples/wintrace.rb +92 -0
  183. data/tests/all.rb +8 -0
  184. data/tests/dasm.rb +39 -0
  185. data/tests/dynldr.rb +35 -0
  186. data/tests/encodeddata.rb +132 -0
  187. data/tests/ia32.rb +82 -0
  188. data/tests/mips.rb +116 -0
  189. data/tests/parse_c.rb +239 -0
  190. data/tests/preprocessor.rb +269 -0
  191. data/tests/x86_64.rb +62 -0
  192. metadata +255 -0
@@ -0,0 +1,621 @@
1
+ # This file is part of Metasm, the Ruby assembly manipulation suite
2
+ # Copyright (C) 2006-2009 Yoann GUILLOT
3
+ #
4
+ # Licence is LGPL, see LICENCE in the top-level directory
5
+
6
+ require 'metasm/dynldr'
7
+
8
+ module Metasm
9
+ module Gui
10
+ class XGui < DynLdr
11
+ new_api_c <<EOS, 'libX11.so'
12
+ #define KeyPressMask (1L<<0)
13
+ #define KeyReleaseMask (1L<<1)
14
+ #define ButtonPressMask (1L<<2)
15
+ #define ButtonReleaseMask (1L<<3)
16
+ #define EnterWindowMask (1L<<4)
17
+ #define LeaveWindowMask (1L<<5)
18
+ #define PointerMotionMask (1L<<6)
19
+ #define PointerMotionHintMask (1L<<7)
20
+ #define Button1MotionMask (1L<<8)
21
+ #define Button2MotionMask (1L<<9)
22
+ #define Button3MotionMask (1L<<10)
23
+ #define Button4MotionMask (1L<<11)
24
+ #define Button5MotionMask (1L<<12)
25
+ #define ButtonMotionMask (1L<<13)
26
+ #define KeymapStateMask (1L<<14)
27
+ #define ExposureMask (1L<<15)
28
+ #define VisibilityChangeMask (1L<<16)
29
+ #define StructureNotifyMask (1L<<17)
30
+ #define ResizeRedirectMask (1L<<18)
31
+ #define SubstructureNotifyMask (1L<<19)
32
+ #define SubstructureRedirectMask (1L<<20)
33
+ #define FocusChangeMask (1L<<21)
34
+ #define PropertyChangeMask (1L<<22)
35
+ #define ColormapChangeMask (1L<<23)
36
+ #define OwnerGrabButtonMask (1L<<24)
37
+
38
+ #define KeyPress 2
39
+ #define KeyRelease 3
40
+ #define ButtonPress 4
41
+ #define ButtonRelease 5
42
+ #define MotionNotify 6
43
+ #define EnterNotify 7
44
+ #define LeaveNotify 8
45
+ #define FocusIn 9
46
+ #define FocusOut 10
47
+ #define KeymapNotify 11
48
+ #define Expose 12
49
+ #define GraphicsExpose 13
50
+ #define NoExpose 14
51
+ #define VisibilityNotify 15
52
+ #define CreateNotify 16
53
+ #define DestroyNotify 17
54
+ #define UnmapNotify 18
55
+ #define MapNotify 19
56
+ #define MapRequest 20
57
+ #define ReparentNotify 21
58
+ #define ConfigureNotify 22
59
+ #define ConfigureRequest 23
60
+ #define GravityNotify 24
61
+ #define ResizeRequest 25
62
+ #define CirculateNotify 26
63
+ #define CirculateRequest 27
64
+ #define PropertyNotify 28
65
+ #define SelectionClear 29
66
+ #define SelectionRequest 30
67
+ #define SelectionNotify 31
68
+ #define ColormapNotify 32
69
+ #define ClientMessage 33
70
+ #define MappingNotify 34
71
+ #define GenericEvent 35
72
+ #define LASTEvent 36 /* must be bigger than any event # */
73
+
74
+ typedef unsigned long Atom;
75
+ typedef unsigned long Time;
76
+ typedef unsigned long XID;
77
+ struct _XDisplay;
78
+
79
+ typedef XID Colormap;
80
+ typedef struct _XDisplay Display;
81
+ typedef XID Drawable;
82
+ typedef XID Font;
83
+ typedef struct _XGC *GC;
84
+ typedef XID Pixmap;
85
+ typedef XID Window;
86
+
87
+ typedef
88
+ struct {
89
+ int type;
90
+ unsigned long serial;
91
+ int send_event;
92
+ Display *display;
93
+ Window window;
94
+ } XAnyEvent;
95
+ typedef
96
+ struct {
97
+ int type;
98
+ unsigned long serial;
99
+ int send_event;
100
+ Display *display;
101
+ Window window;
102
+ Window root;
103
+ Window subwindow;
104
+ Time time;
105
+ int x;
106
+ int y;
107
+ int x_root;
108
+ int y_root;
109
+ unsigned int state;
110
+ unsigned int button;
111
+ int same_screen;
112
+ } XButtonEvent;
113
+ typedef
114
+ struct {
115
+ int type;
116
+ unsigned long serial;
117
+ int send_event;
118
+ Display *display;
119
+ Window event;
120
+ Window window;
121
+ int place;
122
+ } XCirculateEvent;
123
+ typedef
124
+ struct {
125
+ int type;
126
+ unsigned long serial;
127
+ int send_event;
128
+ Display *display;
129
+ Window parent;
130
+ Window window;
131
+ int place;
132
+ } XCirculateRequestEvent;
133
+ typedef
134
+ struct {
135
+ int type;
136
+ unsigned long serial;
137
+ int send_event;
138
+ Display *display;
139
+ Window window;
140
+ Atom message_type;
141
+ int format;
142
+
143
+ union {
144
+ char b[20];
145
+ short s[10];
146
+ long l[5];
147
+ } data;
148
+ } XClientMessageEvent;
149
+ typedef
150
+ struct {
151
+ int type;
152
+ unsigned long serial;
153
+ int send_event;
154
+ Display *display;
155
+ Window window;
156
+ Colormap colormap;
157
+ int new;
158
+ int state;
159
+ } XColormapEvent;
160
+ typedef
161
+ struct {
162
+ int type;
163
+ unsigned long serial;
164
+ int send_event;
165
+ Display *display;
166
+ Window event;
167
+ Window window;
168
+ int x;
169
+ int y;
170
+ int width;
171
+ int height;
172
+ int border_width;
173
+ Window above;
174
+ int override_redirect;
175
+ } XConfigureEvent;
176
+ typedef
177
+ struct {
178
+ int type;
179
+ unsigned long serial;
180
+ int send_event;
181
+ Display *display;
182
+ Window parent;
183
+ Window window;
184
+ int x;
185
+ int y;
186
+ int width;
187
+ int height;
188
+ int border_width;
189
+ Window above;
190
+ int detail;
191
+ unsigned long value_mask;
192
+ } XConfigureRequestEvent;
193
+ typedef
194
+ struct {
195
+ int type;
196
+ unsigned long serial;
197
+ int send_event;
198
+ Display *display;
199
+ Window parent;
200
+ Window window;
201
+ int x;
202
+ int y;
203
+ int width;
204
+ int height;
205
+ int border_width;
206
+ int override_redirect;
207
+ } XCreateWindowEvent;
208
+ typedef
209
+ struct {
210
+ int type;
211
+ unsigned long serial;
212
+ int send_event;
213
+ Display *display;
214
+ Window window;
215
+ Window root;
216
+ Window subwindow;
217
+ Time time;
218
+ int x;
219
+ int y;
220
+ int x_root;
221
+ int y_root;
222
+ int mode;
223
+ int detail;
224
+ int same_screen;
225
+ int focus;
226
+ unsigned int state;
227
+ } XCrossingEvent;
228
+ typedef
229
+ struct {
230
+ int type;
231
+ unsigned long serial;
232
+ int send_event;
233
+ Display *display;
234
+ Window event;
235
+ Window window;
236
+ } XDestroyWindowEvent;
237
+ typedef
238
+ struct {
239
+ int type;
240
+ Display *display;
241
+ XID resourceid;
242
+ unsigned long serial;
243
+ unsigned char error_code;
244
+ unsigned char request_code;
245
+ unsigned char minor_code;
246
+ } XErrorEvent;
247
+ typedef
248
+ struct {
249
+ int type;
250
+ unsigned long serial;
251
+ int send_event;
252
+ Display *display;
253
+ Window window;
254
+ int x;
255
+ int y;
256
+ int width;
257
+ int height;
258
+ int count;
259
+ } XExposeEvent;
260
+ typedef
261
+ struct {
262
+ int type;
263
+ unsigned long serial;
264
+ int send_event;
265
+ Display *display;
266
+ Window window;
267
+ int mode;
268
+ int detail;
269
+ } XFocusChangeEvent;
270
+ typedef
271
+ struct {
272
+ int function;
273
+ unsigned long plane_mask;
274
+ unsigned long foreground;
275
+ unsigned long background;
276
+ int line_width;
277
+ int line_style;
278
+ int cap_style;
279
+ int join_style;
280
+ int fill_style;
281
+ int fill_rule;
282
+ int arc_mode;
283
+ Pixmap tile;
284
+ Pixmap stipple;
285
+ int ts_x_origin;
286
+ int ts_y_origin;
287
+ Font font;
288
+ int subwindow_mode;
289
+ int graphics_exposures;
290
+ int clip_x_origin;
291
+ int clip_y_origin;
292
+ Pixmap clip_mask;
293
+ int dash_offset;
294
+ char dashes;
295
+ } XGCValues;
296
+ typedef
297
+ struct {
298
+ int type;
299
+ unsigned long serial;
300
+ int send_event;
301
+ Display *display;
302
+ int extension;
303
+ int evtype;
304
+ } XGenericEvent;
305
+ typedef
306
+ struct {
307
+ int type;
308
+ unsigned long serial;
309
+ int send_event;
310
+ Display *display;
311
+ int extension;
312
+ int evtype;
313
+ unsigned int cookie;
314
+ void *data;
315
+ } XGenericEventCookie;
316
+ typedef
317
+ struct {
318
+ int type;
319
+ unsigned long serial;
320
+ int send_event;
321
+ Display *display;
322
+ Drawable drawable;
323
+ int x;
324
+ int y;
325
+ int width;
326
+ int height;
327
+ int count;
328
+ int major_code;
329
+ int minor_code;
330
+ } XGraphicsExposeEvent;
331
+ typedef
332
+ struct {
333
+ int type;
334
+ unsigned long serial;
335
+ int send_event;
336
+ Display *display;
337
+ Window event;
338
+ Window window;
339
+ int x;
340
+ int y;
341
+ } XGravityEvent;
342
+ typedef
343
+ struct {
344
+ int type;
345
+ unsigned long serial;
346
+ int send_event;
347
+ Display *display;
348
+ Window window;
349
+ Window root;
350
+ Window subwindow;
351
+ Time time;
352
+ int x;
353
+ int y;
354
+ int x_root;
355
+ int y_root;
356
+ unsigned int state;
357
+ unsigned int keycode;
358
+ int same_screen;
359
+ } XKeyEvent;
360
+ typedef
361
+ struct {
362
+ int type;
363
+ unsigned long serial;
364
+ int send_event;
365
+ Display *display;
366
+ Window window;
367
+ char key_vector[32];
368
+ } XKeymapEvent;
369
+ typedef
370
+ struct {
371
+ int type;
372
+ unsigned long serial;
373
+ int send_event;
374
+ Display *display;
375
+ Window event;
376
+ Window window;
377
+ int override_redirect;
378
+ } XMapEvent;
379
+ typedef
380
+ struct {
381
+ int type;
382
+ unsigned long serial;
383
+ int send_event;
384
+ Display *display;
385
+ Window parent;
386
+ Window window;
387
+ } XMapRequestEvent;
388
+ typedef
389
+ struct {
390
+ int type;
391
+ unsigned long serial;
392
+ int send_event;
393
+ Display *display;
394
+ Window window;
395
+ int request;
396
+ int first_keycode;
397
+ int count;
398
+ } XMappingEvent;
399
+ typedef
400
+ struct {
401
+ int type;
402
+ unsigned long serial;
403
+ int send_event;
404
+ Display *display;
405
+ Window window;
406
+ Window root;
407
+ Window subwindow;
408
+ Time time;
409
+ int x;
410
+ int y;
411
+ int x_root;
412
+ int y_root;
413
+ unsigned int state;
414
+ char is_hint;
415
+ int same_screen;
416
+ } XMotionEvent;
417
+ typedef
418
+ struct {
419
+ int type;
420
+ unsigned long serial;
421
+ int send_event;
422
+ Display *display;
423
+ Drawable drawable;
424
+ int major_code;
425
+ int minor_code;
426
+ } XNoExposeEvent;
427
+ typedef
428
+ struct {
429
+ int type;
430
+ unsigned long serial;
431
+ int send_event;
432
+ Display *display;
433
+ Window window;
434
+ Atom atom;
435
+ Time time;
436
+ int state;
437
+ } XPropertyEvent;
438
+ typedef
439
+ struct {
440
+ int type;
441
+ unsigned long serial;
442
+ int send_event;
443
+ Display *display;
444
+ Window event;
445
+ Window window;
446
+ Window parent;
447
+ int x;
448
+ int y;
449
+ int override_redirect;
450
+ } XReparentEvent;
451
+ typedef
452
+ struct {
453
+ int type;
454
+ unsigned long serial;
455
+ int send_event;
456
+ Display *display;
457
+ Window window;
458
+ int width;
459
+ int height;
460
+ } XResizeRequestEvent;
461
+ typedef
462
+ struct {
463
+ int type;
464
+ unsigned long serial;
465
+ int send_event;
466
+ Display *display;
467
+ Window window;
468
+ Atom selection;
469
+ Time time;
470
+ } XSelectionClearEvent;
471
+ typedef
472
+ struct {
473
+ int type;
474
+ unsigned long serial;
475
+ int send_event;
476
+ Display *display;
477
+ Window requestor;
478
+ Atom selection;
479
+ Atom target;
480
+ Atom property;
481
+ Time time;
482
+ } XSelectionEvent;
483
+ typedef
484
+ struct {
485
+ int type;
486
+ unsigned long serial;
487
+ int send_event;
488
+ Display *display;
489
+ Window owner;
490
+ Window requestor;
491
+ Atom selection;
492
+ Atom target;
493
+ Atom property;
494
+ Time time;
495
+ } XSelectionRequestEvent;
496
+ typedef
497
+ struct {
498
+ int type;
499
+ unsigned long serial;
500
+ int send_event;
501
+ Display *display;
502
+ Window event;
503
+ Window window;
504
+ int from_configure;
505
+ } XUnmapEvent;
506
+ typedef
507
+ struct {
508
+ int type;
509
+ unsigned long serial;
510
+ int send_event;
511
+ Display *display;
512
+ Window window;
513
+ int state;
514
+ } XVisibilityEvent;
515
+
516
+ union _XEvent {
517
+ int type;
518
+ XAnyEvent xany;
519
+ XKeyEvent xkey;
520
+ XButtonEvent xbutton;
521
+ XMotionEvent xmotion;
522
+ XCrossingEvent xcrossing;
523
+ XFocusChangeEvent xfocus;
524
+ XExposeEvent xexpose;
525
+ XGraphicsExposeEvent xgraphicsexpose;
526
+ XNoExposeEvent xnoexpose;
527
+ XVisibilityEvent xvisibility;
528
+ XCreateWindowEvent xcreatewindow;
529
+ XDestroyWindowEvent xdestroywindow;
530
+ XUnmapEvent xunmap;
531
+ XMapEvent xmap;
532
+ XMapRequestEvent xmaprequest;
533
+ XReparentEvent xreparent;
534
+ XConfigureEvent xconfigure;
535
+ XGravityEvent xgravity;
536
+ XResizeRequestEvent xresizerequest;
537
+ XConfigureRequestEvent xconfigurerequest;
538
+ XCirculateEvent xcirculate;
539
+ XCirculateRequestEvent xcirculaterequest;
540
+ XPropertyEvent xproperty;
541
+ XSelectionClearEvent xselectionclear;
542
+ XSelectionRequestEvent xselectionrequest;
543
+ XSelectionEvent xselection;
544
+ XColormapEvent xcolormap;
545
+ XClientMessageEvent xclient;
546
+ XMappingEvent xmapping;
547
+ XErrorEvent xerror;
548
+ XKeymapEvent xkeymap;
549
+ XGenericEvent xgeneric;
550
+ XGenericEventCookie xcookie;
551
+ long pad[24];
552
+ };
553
+
554
+
555
+ typedef union _XEvent XEvent;
556
+
557
+ int XCloseDisplay(Display*);
558
+ Window XCreateSimpleWindow(Display*, Window, int, int, unsigned int, unsigned int, unsigned int, unsigned long, unsigned long);
559
+ int XDestroyWindow(Display*, Window);
560
+ Display *XOpenDisplay(const char*);
561
+ int XSelectInput(Display*, Window, long);
562
+ int XSetForeground(Display*, GC, unsigned long);
563
+ int XStoreName(Display*, Window, const char*);
564
+ GC XCreateGC(Display*, Drawable, unsigned long, XGCValues*);
565
+ int XNextEvent(Display*, XEvent*);
566
+ int XDefaultScreen(Display*);
567
+ int XDefaultRootWindow(Display*);
568
+ int XRootWindow(Display*, int);
569
+ int XDefaultColormap(Display*, int);
570
+ int XBlackPixel(Display*, int);
571
+ int XWhitePixel(Display*, int);
572
+ int XMapWindow(Display*, Window);
573
+ int XFillRectangle(Display*, Window, GC, int, int, int, int);
574
+ int XDrawLine(Display*, Window, GC, int, int, int, int);
575
+ int XDrawString(Display*, Drawable, GC, int, int, const char*, int);
576
+ int XLookupKeysym(XEvent*, int);
577
+ EOS
578
+
579
+ def self.test
580
+ d = xopendisplay(nil)
581
+ s = xdefaultscreen(d)
582
+ cmap = xdefaultcolormap(d, s)
583
+ w = xcreatesimplewindow(d, xdefaultrootwindow(d), 0, 0, 28, 28, 0, xblackpixel(d, s), xblackpixel(d, s))
584
+ xstorename(d, w, "lol")
585
+ gc = xcreategc(d, w, 0, 0)
586
+ xsetforeground(d, gc, xwhitepixel(d, s))
587
+ xselectinput(d, w, EXPOSUREMASK|KEYPRESSMASK|BUTTONPRESSMASK)
588
+ xmapwindow(d, w)
589
+ msg = alloc_c_struct('XEvent')
590
+ str = 'llllmmmml'
591
+ x = 12
592
+ y = 20
593
+ loop {
594
+ xnextevent(d, msg)
595
+ case msg['type']
596
+ when EXPOSE
597
+ #xsetforeground(d, gc, col)
598
+ #xdrawrectangle(d, w, gc, x, y+8, 30, 30)
599
+ xfillrectangle(d, w, gc, x, y+8, 30, 30)
600
+ xdrawline(d, w, gc, x, y+38, x+30, y+53)
601
+ xdrawstring(d, w, gc, x, y, str, str.length)
602
+ when KEYPRESS
603
+ k = xlookupkeysym(msg, 0)
604
+ p k
605
+ when BUTTONPRESS
606
+ break
607
+ end
608
+ }
609
+ xdestroywindow(d, w)
610
+ xclosedisplay(d)
611
+ end
612
+
613
+ test
614
+
615
+ end
616
+ end
617
+ end
618
+
619
+ #require 'metasm/gui/dasm_main'
620
+ #require 'metasm/gui/debug'
621
+