PyNerva 0.0.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of PyNerva might be problematic. Click here for more details.

Files changed (74) hide show
  1. nervapy/__init__.py +50 -0
  2. nervapy/abi.py +91 -0
  3. nervapy/arm/__init__.py +124 -0
  4. nervapy/arm/__main__.py +0 -0
  5. nervapy/arm/abi.py +138 -0
  6. nervapy/arm/formats.py +49 -0
  7. nervapy/arm/function.py +2405 -0
  8. nervapy/arm/generic.py +10797 -0
  9. nervapy/arm/instructions.py +519 -0
  10. nervapy/arm/isa.py +409 -0
  11. nervapy/arm/literal_pool.py +331 -0
  12. nervapy/arm/microarchitecture.py +211 -0
  13. nervapy/arm/pseudo.py +652 -0
  14. nervapy/arm/registers.py +1458 -0
  15. nervapy/arm/vfpneon.py +4092 -0
  16. nervapy/arm.py +13 -0
  17. nervapy/c/__init__.py +1 -0
  18. nervapy/c/types.py +436 -0
  19. nervapy/codegen.py +99 -0
  20. nervapy/common/__init__.py +4 -0
  21. nervapy/common/function.py +5 -0
  22. nervapy/common/regalloc.py +121 -0
  23. nervapy/constant_data.py +282 -0
  24. nervapy/encoder.py +246 -0
  25. nervapy/formats/__init__.py +2 -0
  26. nervapy/formats/elf/__init__.py +4 -0
  27. nervapy/formats/elf/file.py +178 -0
  28. nervapy/formats/elf/image.py +106 -0
  29. nervapy/formats/elf/section.py +422 -0
  30. nervapy/formats/elf/symbol.py +281 -0
  31. nervapy/formats/macho/__init__.py +2 -0
  32. nervapy/formats/macho/file.py +123 -0
  33. nervapy/formats/macho/image.py +143 -0
  34. nervapy/formats/macho/section.py +322 -0
  35. nervapy/formats/macho/symbol.py +158 -0
  36. nervapy/formats/mscoff/__init__.py +8 -0
  37. nervapy/formats/mscoff/image.py +132 -0
  38. nervapy/formats/mscoff/section.py +181 -0
  39. nervapy/formats/mscoff/symbol.py +148 -0
  40. nervapy/function.py +136 -0
  41. nervapy/literal.py +731 -0
  42. nervapy/loader.py +188 -0
  43. nervapy/name.py +159 -0
  44. nervapy/parse.py +52 -0
  45. nervapy/stream.py +58 -0
  46. nervapy/util.py +126 -0
  47. nervapy/writer.py +518 -0
  48. nervapy/x86_64/__init__.py +324 -0
  49. nervapy/x86_64/__main__.py +407 -0
  50. nervapy/x86_64/abi.py +517 -0
  51. nervapy/x86_64/amd.py +6464 -0
  52. nervapy/x86_64/avx.py +102029 -0
  53. nervapy/x86_64/crypto.py +1533 -0
  54. nervapy/x86_64/encoding.py +424 -0
  55. nervapy/x86_64/fma.py +19138 -0
  56. nervapy/x86_64/function.py +2707 -0
  57. nervapy/x86_64/generic.py +23384 -0
  58. nervapy/x86_64/instructions.py +500 -0
  59. nervapy/x86_64/isa.py +476 -0
  60. nervapy/x86_64/lower.py +126 -0
  61. nervapy/x86_64/mask.py +2593 -0
  62. nervapy/x86_64/meta.py +143 -0
  63. nervapy/x86_64/mmxsse.py +17265 -0
  64. nervapy/x86_64/nacl.py +327 -0
  65. nervapy/x86_64/operand.py +1204 -0
  66. nervapy/x86_64/options.py +21 -0
  67. nervapy/x86_64/pseudo.py +686 -0
  68. nervapy/x86_64/registers.py +1225 -0
  69. nervapy/x86_64/types.py +17 -0
  70. nervapy/x86_64/uarch.py +580 -0
  71. pynerva-0.0.5.dist-info/METADATA +310 -0
  72. pynerva-0.0.5.dist-info/RECORD +74 -0
  73. pynerva-0.0.5.dist-info/WHEEL +4 -0
  74. pynerva-0.0.5.dist-info/licenses/LICENSE.rst +15 -0
nervapy/x86_64/abi.py ADDED
@@ -0,0 +1,517 @@
1
+ # This file is part of PeachPy package and is licensed under the Simplified BSD license.
2
+ # See license.rst for the full text of the license.
3
+
4
+ import nervapy.formats.elf.file
5
+ import nervapy.formats.mscoff
6
+ from nervapy.abi import ABI, Endianness
7
+ from nervapy.x86_64.registers import (mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7,
8
+ r8, r9, r10, r11, r12, r13, r14, r15,
9
+ rax, rbp, rbx, rcx, rdi, rdx, rsi, xmm0,
10
+ xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,
11
+ xmm8, xmm9, xmm10, xmm11, xmm12, xmm13,
12
+ xmm14, xmm15)
13
+
14
+ microsoft_x64_abi = ABI(
15
+ "Microsoft x64 ABI",
16
+ endianness=Endianness.Little,
17
+ bool_size=1,
18
+ wchar_size=2,
19
+ short_size=2,
20
+ int_size=4,
21
+ long_size=4,
22
+ longlong_size=8,
23
+ pointer_size=8,
24
+ index_size=8,
25
+ stack_alignment=16,
26
+ red_zone=0,
27
+ callee_save_registers=[
28
+ rbx,
29
+ rsi,
30
+ rdi,
31
+ rbp,
32
+ r12,
33
+ r13,
34
+ r14,
35
+ r15,
36
+ xmm6,
37
+ xmm7,
38
+ xmm8,
39
+ xmm9,
40
+ xmm10,
41
+ xmm11,
42
+ xmm12,
43
+ xmm13,
44
+ xmm14,
45
+ xmm15,
46
+ ],
47
+ argument_registers=[rcx, rdx, r8, r9, xmm0, xmm1, xmm2, xmm3],
48
+ volatile_registers=[
49
+ rax,
50
+ r10,
51
+ r11,
52
+ mm0,
53
+ mm1,
54
+ mm2,
55
+ mm3,
56
+ mm4,
57
+ mm5,
58
+ mm6,
59
+ mm7,
60
+ xmm4,
61
+ xmm5,
62
+ ],
63
+ mscoff_machine_type=nervapy.formats.mscoff.MachineType.x86_64,
64
+ )
65
+
66
+ system_v_x86_64_abi = ABI(
67
+ "SystemV x86-64 ABI",
68
+ endianness=Endianness.Little,
69
+ bool_size=1,
70
+ wchar_size=4,
71
+ short_size=2,
72
+ int_size=4,
73
+ long_size=8,
74
+ longlong_size=8,
75
+ pointer_size=8,
76
+ index_size=8,
77
+ stack_alignment=16,
78
+ red_zone=128,
79
+ callee_save_registers=[rbx, rbp, r12, r13, r14, r15],
80
+ argument_registers=[
81
+ rdi,
82
+ rsi,
83
+ rdx,
84
+ rcx,
85
+ r8,
86
+ r9,
87
+ xmm0,
88
+ xmm1,
89
+ xmm2,
90
+ xmm3,
91
+ xmm4,
92
+ xmm5,
93
+ xmm6,
94
+ xmm7,
95
+ ],
96
+ volatile_registers=[
97
+ rax,
98
+ r10,
99
+ r11,
100
+ mm0,
101
+ mm1,
102
+ mm2,
103
+ mm3,
104
+ mm4,
105
+ mm5,
106
+ mm6,
107
+ mm7,
108
+ xmm8,
109
+ xmm9,
110
+ xmm10,
111
+ xmm11,
112
+ xmm12,
113
+ xmm13,
114
+ xmm14,
115
+ xmm15,
116
+ ],
117
+ elf_class=nervapy.formats.elf.file.ElfClass.class64,
118
+ elf_data_encoding=nervapy.formats.elf.file.DataEncoding.little_endian,
119
+ elf_machine_type=nervapy.formats.elf.file.MachineType.x86_64,
120
+ )
121
+
122
+ linux_x32_abi = ABI(
123
+ "Linux X32 ABI",
124
+ endianness=Endianness.Little,
125
+ bool_size=1,
126
+ wchar_size=4,
127
+ short_size=2,
128
+ int_size=4,
129
+ long_size=4,
130
+ longlong_size=8,
131
+ pointer_size=4,
132
+ index_size=4,
133
+ stack_alignment=16,
134
+ red_zone=128,
135
+ callee_save_registers=[rbx, rbp, r12, r13, r14, r15],
136
+ argument_registers=[
137
+ rdi,
138
+ rsi,
139
+ rdx,
140
+ rcx,
141
+ r8,
142
+ r9,
143
+ xmm0,
144
+ xmm1,
145
+ xmm2,
146
+ xmm3,
147
+ xmm4,
148
+ xmm5,
149
+ xmm6,
150
+ xmm7,
151
+ ],
152
+ volatile_registers=[
153
+ rax,
154
+ r10,
155
+ r11,
156
+ mm0,
157
+ mm1,
158
+ mm2,
159
+ mm3,
160
+ mm4,
161
+ mm5,
162
+ mm6,
163
+ mm7,
164
+ xmm8,
165
+ xmm9,
166
+ xmm10,
167
+ xmm11,
168
+ xmm12,
169
+ xmm13,
170
+ xmm14,
171
+ xmm15,
172
+ ],
173
+ elf_class=nervapy.formats.elf.file.ElfClass.class32,
174
+ elf_data_encoding=nervapy.formats.elf.file.DataEncoding.little_endian,
175
+ elf_machine_type=nervapy.formats.elf.file.MachineType.x86_64,
176
+ )
177
+
178
+ native_client_x86_64_abi = ABI(
179
+ "Native Client x86-64 ABI",
180
+ endianness=Endianness.Little,
181
+ bool_size=1,
182
+ wchar_size=4,
183
+ short_size=2,
184
+ int_size=4,
185
+ long_size=4,
186
+ longlong_size=8,
187
+ pointer_size=4,
188
+ index_size=4,
189
+ stack_alignment=16,
190
+ red_zone=0,
191
+ callee_save_registers=[rbx, rbp, r12, r13, r14, r15],
192
+ argument_registers=[
193
+ rdi,
194
+ rsi,
195
+ rdx,
196
+ rcx,
197
+ r8,
198
+ r9,
199
+ xmm0,
200
+ xmm1,
201
+ xmm2,
202
+ xmm3,
203
+ xmm4,
204
+ xmm5,
205
+ xmm6,
206
+ xmm7,
207
+ ],
208
+ volatile_registers=[
209
+ rax,
210
+ r10,
211
+ r11,
212
+ mm0,
213
+ mm1,
214
+ mm2,
215
+ mm3,
216
+ mm4,
217
+ mm5,
218
+ mm6,
219
+ mm7,
220
+ xmm8,
221
+ xmm9,
222
+ xmm10,
223
+ xmm11,
224
+ xmm12,
225
+ xmm13,
226
+ xmm14,
227
+ xmm15,
228
+ ],
229
+ restricted_registers=[rbp],
230
+ elf_class=nervapy.formats.elf.file.ElfClass.class64,
231
+ elf_data_encoding=nervapy.formats.elf.file.DataEncoding.little_endian,
232
+ elf_machine_type=nervapy.formats.elf.file.MachineType.x86_64,
233
+ )
234
+
235
+ gosyso_amd64_abi = ABI(
236
+ "Go/SysO x86-64 ABI",
237
+ endianness=Endianness.Little,
238
+ bool_size=1,
239
+ wchar_size=4,
240
+ short_size=2,
241
+ int_size=4,
242
+ long_size=8,
243
+ longlong_size=8,
244
+ pointer_size=8,
245
+ index_size=8,
246
+ stack_alignment=8,
247
+ red_zone=0,
248
+ callee_save_registers=[],
249
+ argument_registers=[],
250
+ volatile_registers=[
251
+ rax,
252
+ rbx,
253
+ rcx,
254
+ rdx,
255
+ rdi,
256
+ rsi,
257
+ rbp,
258
+ r8,
259
+ r9,
260
+ r10,
261
+ r11,
262
+ r12,
263
+ r13,
264
+ r14,
265
+ r15,
266
+ mm0,
267
+ mm1,
268
+ mm2,
269
+ mm3,
270
+ mm4,
271
+ mm5,
272
+ mm6,
273
+ mm7,
274
+ xmm0,
275
+ xmm1,
276
+ xmm2,
277
+ xmm3,
278
+ xmm4,
279
+ xmm5,
280
+ xmm6,
281
+ xmm7,
282
+ xmm8,
283
+ xmm8,
284
+ xmm9,
285
+ xmm10,
286
+ xmm11,
287
+ xmm12,
288
+ xmm13,
289
+ xmm14,
290
+ xmm15,
291
+ ],
292
+ elf_class=nervapy.formats.elf.file.ElfClass.class64,
293
+ elf_data_encoding=nervapy.formats.elf.file.DataEncoding.little_endian,
294
+ elf_machine_type=nervapy.formats.elf.file.MachineType.x86_64,
295
+ mscoff_machine_type=nervapy.formats.mscoff.MachineType.x86_64,
296
+ )
297
+
298
+ goasm_amd64_abi = ABI(
299
+ "Go/Asm x86-64 ABI",
300
+ endianness=Endianness.Little,
301
+ bool_size=1,
302
+ wchar_size=4,
303
+ short_size=2,
304
+ int_size=4,
305
+ long_size=8,
306
+ longlong_size=8,
307
+ pointer_size=8,
308
+ index_size=8,
309
+ stack_alignment=8,
310
+ red_zone=0,
311
+ callee_save_registers=[],
312
+ argument_registers=[],
313
+ volatile_registers=[
314
+ rax,
315
+ rbx,
316
+ rcx,
317
+ rdx,
318
+ rdi,
319
+ rsi,
320
+ rbp,
321
+ r8,
322
+ r9,
323
+ r10,
324
+ r11,
325
+ r12,
326
+ r13,
327
+ r14,
328
+ r15,
329
+ mm0,
330
+ mm1,
331
+ mm2,
332
+ mm3,
333
+ mm4,
334
+ mm5,
335
+ mm6,
336
+ mm7,
337
+ xmm0,
338
+ xmm1,
339
+ xmm2,
340
+ xmm3,
341
+ xmm4,
342
+ xmm5,
343
+ xmm6,
344
+ xmm7,
345
+ xmm8,
346
+ xmm8,
347
+ xmm9,
348
+ xmm10,
349
+ xmm11,
350
+ xmm12,
351
+ xmm13,
352
+ xmm14,
353
+ xmm15,
354
+ ],
355
+ )
356
+
357
+ gosyso_amd64p32_abi = ABI(
358
+ "Go/SysO x32 ABI",
359
+ endianness=Endianness.Little,
360
+ bool_size=1,
361
+ wchar_size=4,
362
+ short_size=2,
363
+ int_size=4,
364
+ long_size=8,
365
+ longlong_size=8,
366
+ pointer_size=4,
367
+ index_size=4,
368
+ stack_alignment=4,
369
+ red_zone=0,
370
+ callee_save_registers=[],
371
+ argument_registers=[],
372
+ volatile_registers=[
373
+ rax,
374
+ rbx,
375
+ rcx,
376
+ rdx,
377
+ rdi,
378
+ rsi,
379
+ rbp,
380
+ r8,
381
+ r9,
382
+ r10,
383
+ r11,
384
+ r12,
385
+ r13,
386
+ r14,
387
+ r15,
388
+ mm0,
389
+ mm1,
390
+ mm2,
391
+ mm3,
392
+ mm4,
393
+ mm5,
394
+ mm6,
395
+ mm7,
396
+ xmm0,
397
+ xmm1,
398
+ xmm2,
399
+ xmm3,
400
+ xmm4,
401
+ xmm5,
402
+ xmm6,
403
+ xmm7,
404
+ xmm8,
405
+ xmm8,
406
+ xmm9,
407
+ xmm10,
408
+ xmm11,
409
+ xmm12,
410
+ xmm13,
411
+ xmm14,
412
+ xmm15,
413
+ ],
414
+ elf_class=nervapy.formats.elf.file.ElfClass.class32,
415
+ elf_data_encoding=nervapy.formats.elf.file.DataEncoding.little_endian,
416
+ elf_machine_type=nervapy.formats.elf.file.MachineType.x86_64,
417
+ mscoff_machine_type=nervapy.formats.mscoff.MachineType.x86_64,
418
+ )
419
+
420
+ goasm_amd64p32_abi = ABI(
421
+ "Go/Asm x32 ABI",
422
+ endianness=Endianness.Little,
423
+ bool_size=1,
424
+ wchar_size=4,
425
+ short_size=2,
426
+ int_size=4,
427
+ long_size=8,
428
+ longlong_size=8,
429
+ pointer_size=4,
430
+ index_size=4,
431
+ stack_alignment=4,
432
+ red_zone=0,
433
+ callee_save_registers=[],
434
+ argument_registers=[],
435
+ volatile_registers=[
436
+ rax,
437
+ rbx,
438
+ rcx,
439
+ rdx,
440
+ rdi,
441
+ rsi,
442
+ rbp,
443
+ r8,
444
+ r9,
445
+ r10,
446
+ r11,
447
+ r12,
448
+ r13,
449
+ r14,
450
+ r15,
451
+ mm0,
452
+ mm1,
453
+ mm2,
454
+ mm3,
455
+ mm4,
456
+ mm5,
457
+ mm6,
458
+ mm7,
459
+ xmm0,
460
+ xmm1,
461
+ xmm2,
462
+ xmm3,
463
+ xmm4,
464
+ xmm5,
465
+ xmm6,
466
+ xmm7,
467
+ xmm8,
468
+ xmm8,
469
+ xmm9,
470
+ xmm10,
471
+ xmm11,
472
+ xmm12,
473
+ xmm13,
474
+ xmm14,
475
+ xmm15,
476
+ ],
477
+ )
478
+
479
+
480
+ def detect(system_abi=False):
481
+ """Detects host ABI (either process ABI or system ABI, depending on parameters)
482
+
483
+ :param bool system_abi: specified whether system ABI or process ABI should be detected. The two may differ, e.g.
484
+ when a 64-bit system runs 32-bit Python interpreter.
485
+
486
+ :returns: the host ABI or None if the host is not recognized or is not x86-64.
487
+ :rtype: ABI or None
488
+ """
489
+ import os
490
+ import platform
491
+ import struct
492
+
493
+ osname, node, release, version, machine, processor = (
494
+ platform.uname()
495
+ ) # pylint:disable=unpacking-non-sequence
496
+ pointer_size = struct.calcsize("P")
497
+ if osname == "Darwin" and machine == "x86_64" and (system_abi or pointer_size == 8):
498
+ return system_v_x86_64_abi
499
+ elif (
500
+ osname == "FreeBSD" and machine == "amd64" and (system_abi or pointer_size == 8)
501
+ ):
502
+ return system_v_x86_64_abi
503
+ elif osname == "Linux" and machine == "x86_64":
504
+ if system_abi or pointer_size == 8:
505
+ return system_v_x86_64_abi
506
+ else:
507
+ return linux_x32_abi
508
+ elif (
509
+ osname == "Windows" and machine == "AMD64" and (system_abi or pointer_size == 8)
510
+ ):
511
+ return microsoft_x64_abi
512
+ elif (
513
+ osname == "NaCl"
514
+ and os.environ.get("NACL_ARCH") == "x86_64"
515
+ and (system_abi or pointer_size == 4)
516
+ ):
517
+ return native_client_x86_64_abi