# -*- coding: cp1251 -*-
"""

(c)2008, Alexey Sudachen, alexey@sudachen.name
http://www.ethical-hacker.info/

The part of binutils package
There is front-end to the udi86 library
http://sourceforge.net/projects/udis86

"""

import _udis86

class x86_Instruction(object):
    __slots__ = [
        'mnemonic',
        'operand',
        'pc',
        'ins_len',
        'ins_asm',
        'ins_bytes',
        ]

class x86_Operand(object):
    __slots__ = [
        'oid',
        'value',
        ]
    def __init__(self,o=None,v=None):
        self.oid = o
        self.value = v

def disasm_ptr(ptr_in_process_memory,assume_pc,memory_limit,max_ins_count,style='att'):
    return _udis86.disasm_ptr(ptr_in_process_memory,assume_pc,memory_limit,max_ins_count,style)

def disasm_str(bytes,assume_pc,max_ins_count,style='att'):
    pass

UD_Iaaa = 0
UD_Iaad = 1
UD_Iaam = 2
UD_Iaas = 3
UD_Iadc = 4
UD_Iadd = 5
UD_Iaddpd = 6
UD_Iaddps = 7
UD_Iaddsd = 8
UD_Iaddss = 9
UD_Iand = 10
UD_Iandnpd = 11
UD_Iandnps = 12
UD_Iandpd = 13
UD_Iandps = 14
UD_Iarpl = 15
UD_Ibound = 16
UD_Ibsf = 17
UD_Ibsr = 18
UD_Ibswap = 19
UD_Ibt = 20
UD_Ibtc = 21
UD_Ibtr = 22
UD_Ibts = 23
UD_Icall = 24
UD_Icbw = 25
UD_Icdqe = 26
UD_Iclc = 27
UD_Icld = 28
UD_Iclflush = 29
UD_Icli = 30
UD_Iclts = 31
UD_Icmc = 32
UD_Icmovo = 33
UD_Icmovno = 34
UD_Icmovb = 35
UD_Icmovnb = 36
UD_Icmovz = 37
UD_Icmovnz = 38
UD_Icmovbe = 39
UD_Icmovnbe = 40
UD_Icmovs = 41
UD_Icmovns = 42
UD_Icmovp = 43
UD_Icmovnp = 44
UD_Icmovl = 45
UD_Icmovnl = 46
UD_Icmovle = 47
UD_Icmovnle = 48
UD_Icmp = 49
UD_Icmppd = 50
UD_Icmpps = 51
UD_Icmps = 52
UD_Icmpsb = 53
UD_Icmpsd = 54
UD_Icmpsq = 55
UD_Icmpss = 56
UD_Icmpsw = 57
UD_Icmpxchg = 58
UD_Icmpxchg8b = 59
UD_Icomisd = 60
UD_Icomiss = 61
UD_Icpuid = 62
UD_Icqd = 63
UD_Icqo = 64
UD_Icvtdq2pd = 65
UD_Icvtdq2ps = 66
UD_Icvtpd2dq = 67
UD_Icvtpd2pi = 68
UD_Icvtpd2ps = 69
UD_Icvtpi2pd = 70
UD_Icvtpi2ps = 71
UD_Icvtps2dq = 72
UD_Icvtps2pd = 73
UD_Icvtps2pi = 74
UD_Icvtsd2si = 75
UD_Icvtsd2ss = 76
UD_Icvtsi2sd = 77
UD_Icvtsi2ss = 78
UD_Icvtss2sd = 79
UD_Icvtss2si = 80
UD_Icvttpd2dq = 81
UD_Icvttpd2pi = 82
UD_Icvttps2dq = 83
UD_Icvttps2pi = 84
UD_Icvttsd2si = 85
UD_Icvttsi2sd = 86
UD_Icvttsi2ss = 87
UD_Icvttss2si = 88
UD_Icwd = 89
UD_Icwde = 90
UD_Icdq = 91
UD_Idaa = 92
UD_Idas = 93
UD_Idec = 94
UD_Idiv = 95
UD_Idivpd = 96
UD_Idivps = 97
UD_Idivsd = 98
UD_Idivss = 99
UD_Iemms = 100
UD_Ienter = 101
UD_Iesc = 102
UD_If2xm1 = 103
UD_Ifsxm1 = 104
UD_Ifabs = 105
UD_Ifadd = 106
UD_Ifaddp = 107
UD_Ifbld = 108
UD_Ifbstp = 109
UD_Ifchs = 110
UD_Ifclex = 111
UD_Ifcmovb = 112
UD_Ifcmovbe = 113
UD_Ifcmove = 114
UD_Ifcmovnb = 115
UD_Ifcmovnbe = 116
UD_Ifcmovne = 117
UD_Ifcmovnu = 118
UD_Ifcmovu = 119
UD_Ifcom = 120
UD_Ifcomi = 121
UD_Ifcomp = 122
UD_Ifcomip = 123
UD_Ifcompp = 124
UD_Ifcos = 125
UD_Ifdecstp = 126
UD_Ifdiv = 127
UD_Ifdivp = 128
UD_Ifdivr = 129
UD_Ifdivrp = 130
UD_Ifemms = 131
UD_Iffree = 132
UD_Ifiadd = 133
UD_Ificom = 134
UD_Ificomp = 135
UD_Ifidiv = 136
UD_Ifidivr = 137
UD_Ifidw = 138
UD_Ifidwr = 139
UD_Ifild = 140
UD_Ifimul = 141
UD_Ifincstp = 142
UD_Ifinit = 143
UD_Ifist = 144
UD_Ifistp = 145
UD_Ifisub = 146
UD_Ifisubr = 147
UD_Ifld = 148
UD_Ifld1 = 149
UD_Ifldcw = 150
UD_Ifldenv = 151
UD_Ifldl2e = 152
UD_Ifldl2t = 153
UD_Ifldlg2 = 154
UD_Ifldln2 = 155
UD_Ifldlpi = 156
UD_Ifldx = 157
UD_Ifldz = 158
UD_Ifmul = 159
UD_Ifmulp = 160
UD_Ifnclex = 161
UD_Ifncstp = 162
UD_Ifninit = 163
UD_Ifnop = 164
UD_Ifnsave = 165
UD_Ifnstcw = 166
UD_Ifnstenv = 167
UD_Ifnstsw = 168
UD_Ifpatan = 169
UD_Ifprem = 170
UD_Ifprem1 = 171
UD_Ifptan = 172
UD_Ifpxtract = 173
UD_Ifrndint = 174
UD_Ifrstor = 175
UD_Ifsave = 176
UD_Ifscale = 177
UD_Ifsin = 178
UD_Ifsincos = 179
UD_Ifsqrt = 180
UD_Ifst = 181
UD_Ifstcw = 182
UD_Ifstenv = 183
UD_Ifstp = 184
UD_Ifstsw = 185
UD_Ifsub = 186
UD_Ifsubp = 187
UD_Ifsubr = 188
UD_Ifsubrp = 189
UD_Iftst = 190
UD_Ifucom = 191
UD_Ifucomi = 192
UD_Ifucomip = 193
UD_Ifucomp = 194
UD_Ifucompp = 195
UD_Ifwait = 196
UD_Ifxam = 197
UD_Ifxch = 198
UD_Ifxrstor = 199
UD_Ifxsave = 200
UD_Ifxtract = 201
UD_Ifyl2x = 202
UD_Ifyl2xp1 = 203
UD_Ihlt = 204
UD_Iidiv = 205
UD_Iimul = 206
UD_Iin = 207
UD_Iinc = 208
UD_Iins = 209
UD_Iinsb = 210
UD_Iinsd = 211
UD_Iinsw = 212
UD_Iint = 213
UD_Iinto = 214
UD_Iinvd = 215
UD_Iinvlpg = 216
UD_Iiretw = 217
UD_Iiretd = 218
UD_Iiretq = 219
UD_Ijcxz = 220
UD_Ijecxz = 221
UD_Ijmp = 222
UD_Ijrcxz = 223
UD_Ijo = 224
UD_Ijno = 225
UD_Ijb = 226
UD_Ijnb = 227
UD_Ijz = 228
UD_Ijnz = 229
UD_Ijbe = 230
UD_Ijnbe = 231
UD_Ijs = 232
UD_Ijns = 233
UD_Ijp = 234
UD_Ijnp = 235
UD_Ijl = 236
UD_Ijnl = 237
UD_Ijle = 238
UD_Ijnle = 239
UD_Ilahf = 240
UD_Ilar = 241
UD_Ildmxcsr = 242
UD_Ilds = 243
UD_Ilea = 244
UD_Ileave = 245
UD_Iles = 246
UD_Ilfence = 247
UD_Ilfs = 248
UD_Ilgdt = 249
UD_Ilgs = 250
UD_Ilidt = 251
UD_Illdt = 252
UD_Ilmsw = 253
UD_Ilock = 254
UD_Ilods = 255
UD_Ilodsb = 256
UD_Ilodsd = 257
UD_Ilodsq = 258
UD_Ilodsw = 259
UD_Iloop = 260
UD_Iloope = 261
UD_Iloopn = 262
UD_Iloopne = 263
UD_Iloopnz = 264
UD_Iloopz = 265
UD_Ilsl = 266
UD_Ilss = 267
UD_Iltr = 268
UD_Imaskmovdqu = 269
UD_Imaskmovq = 270
UD_Imaxpd = 271
UD_Imaxps = 272
UD_Imaxsd = 273
UD_Imaxss = 274
UD_Imfence = 275
UD_Iminpd = 276
UD_Iminps = 277
UD_Iminsd = 278
UD_Iminss = 279
UD_Imov = 280
UD_Imovapd = 281
UD_Imovaps = 282
UD_Imovd = 283
UD_Imovdq2q = 284
UD_Imovdqa = 285
UD_Imovdqu = 286
UD_Imovhlps = 287
UD_Imovhpd = 288
UD_Imovhps = 289
UD_Imovlhps = 290
UD_Imovlpd = 291
UD_Imovlps = 292
UD_Imovmskpd = 293
UD_Imovmskps = 294
UD_Imovnig = 295
UD_Imovntdq = 296
UD_Imovnti = 297
UD_Imovntpd = 298
UD_Imovntps = 299
UD_Imovntq = 300
UD_Imovq = 301
UD_Imovq2dq = 302
UD_Imovqa = 303
UD_Imovs = 304
UD_Imovsb = 305
UD_Imovsd = 306
UD_Imovsq = 307
UD_Imovss = 308
UD_Imovsw = 309
UD_Imovsx = 310
UD_Imovsxd = 311
UD_Imovupd = 312
UD_Imovups = 313
UD_Imovzx = 314
UD_Imul = 315
UD_Imulpd = 316
UD_Imulps = 317
UD_Imulsd = 318
UD_Imulss = 319
UD_Ineg = 320
UD_Inop = 321
UD_Inot = 322
UD_Ior = 323
UD_Iorpd = 324
UD_Iorps = 325
UD_Iout = 326
UD_Iouts = 327
UD_Ioutsb = 328
UD_Ioutsd = 329
UD_Ioutsw = 330
UD_Ipackssdw = 331
UD_Ipacksswb = 332
UD_Ipackusdw = 333
UD_Ipackuswb = 334
UD_Ipaddb = 335
UD_Ipaddd = 336
UD_Ipaddq = 337
UD_Ipaddsb = 338
UD_Ipaddsw = 339
UD_Ipaddusb = 340
UD_Ipaddusw = 341
UD_Ipaddw = 342
UD_Ipand = 343
UD_Ipandn = 344
UD_Ipavgb = 345
UD_Ipavgusb = 346
UD_Ipavgw = 347
UD_Ipcmpeqb = 348
UD_Ipcmpeqd = 349
UD_Ipcmpeqw = 350
UD_Ipcmpgtb = 351
UD_Ipcmpgtd = 352
UD_Ipcmpgtw = 353
UD_Ipextrw = 354
UD_Ipf2id = 355
UD_Ipf2iw = 356
UD_Ipfacc = 357
UD_Ipfadd = 358
UD_Ipfcmpeq = 359
UD_Ipfcmpge = 360
UD_Ipfcmpgt = 361
UD_Ipfmax = 362
UD_Ipfmin = 363
UD_Ipfmul = 364
UD_Ipfnacc = 365
UD_Ipfpnacc = 366
UD_Ipfrcp = 367
UD_Ipfrcpit1 = 368
UD_Ipfrcpit2 = 369
UD_Ipfrsqit1 = 370
UD_Ipfrsqrt = 371
UD_Ipfsub = 372
UD_Ipfsubr = 373
UD_Ipi2fd = 374
UD_Ipi2fw = 375
UD_Ipinsrw = 376
UD_Ipmaddwd = 377
UD_Ipmaxsw = 378
UD_Ipmaxub = 379
UD_Ipminsw = 380
UD_Ipminub = 381
UD_Ipmovmskb = 382
UD_Ipmulhrw = 383
UD_Ipmulhuw = 384
UD_Ipmulhw = 385
UD_Ipmullw = 386
UD_Ipmuludq = 387
UD_Ipop = 388
UD_Ipopa = 389
UD_Ipopad = 390
UD_Ipopfw = 391
UD_Ipopfd = 392
UD_Ipopfq = 393
UD_Ipor = 394
UD_Iprefetch = 395
UD_Ipsadbw = 396
UD_Ipshufd = 397
UD_Ipshufhw = 398
UD_Ipshuflw = 399
UD_Ipshufw = 400
UD_Ipslld = 401
UD_Ipslldq = 402
UD_Ipsllq = 403
UD_Ipsllw = 404
UD_Ipsrad = 405
UD_Ipsraw = 406
UD_Ipsraq = 407
UD_Ipsrld = 408
UD_Ipsrldq = 409
UD_Ipsrlq = 410
UD_Ipsrlw = 411
UD_Ipsubb = 412
UD_Ipsubd = 413
UD_Ipsubq = 414
UD_Ipsubsb = 415
UD_Ipsubsw = 416
UD_Ipsubusb = 417
UD_Ipsubusw = 418
UD_Ipsubw = 419
UD_Ipswapd = 420
UD_Ipunpckhbw = 421
UD_Ipunpckhdq = 422
UD_Ipunpckhqdq = 423
UD_Ipunpckhwd = 424
UD_Ipunpcklbw = 425
UD_Ipunpckldq = 426
UD_Ipunpcklqdq = 427
UD_Ipunpcklwd = 428
UD_Ipush = 429
UD_Ipusha = 430
UD_Ipushad = 431
UD_Ipushfw = 432
UD_Ipushfd = 433
UD_Ipushfq = 434
UD_Ipxor = 435
UD_Ircl = 436
UD_Ircpps = 437
UD_Ircpss = 438
UD_Ircr = 439
UD_Irdivisr = 440
UD_Irdmsr = 441
UD_Irdpmc = 442
UD_Irdtsc = 443
UD_Irep = 444
UD_Irepne = 445
UD_Iret = 446
UD_Iretf = 447
UD_Irol = 448
UD_Iror = 449
UD_Irsm = 450
UD_Irsqrtps = 451
UD_Irsqrtss = 452
UD_Isahf = 453
UD_Isal = 454
UD_Isalc = 455
UD_Isar = 456
UD_Isbb = 457
UD_Iscas = 458
UD_Iscasb = 459
UD_Iscasd = 460
UD_Iscasq = 461
UD_Iscasw = 462
UD_Iseto = 463
UD_Isetno = 464
UD_Isetb = 465
UD_Isetnb = 466
UD_Isetz = 467
UD_Isetnz = 468
UD_Isetbe = 469
UD_Isetnbe = 470
UD_Isets = 471
UD_Isetns = 472
UD_Isetp = 473
UD_Isetnp = 474
UD_Isetl = 475
UD_Isetnl = 476
UD_Isetle = 477
UD_Isetnle = 478
UD_Isfence = 479
UD_Isgdt = 480
UD_Ishl = 481
UD_Ishld = 482
UD_Ishr = 483
UD_Ishrd = 484
UD_Ishufpd = 485
UD_Ishufps = 486
UD_Isidt = 487
UD_Isldt = 488
UD_Ismsw = 489
UD_Isqrtpd = 490
UD_Isqrtps = 491
UD_Isqrtsd = 492
UD_Isqrtss = 493
UD_Istc = 494
UD_Istd = 495
UD_Isti = 496
UD_Istmxcsr = 497
UD_Istos = 498
UD_Istosb = 499
UD_Istosw = 500
UD_Istosd = 501
UD_Istr = 502
UD_Isub = 503
UD_Isubpd = 504
UD_Isubps = 505
UD_Isubsd = 506
UD_Isubss = 507
UD_Iswapgs = 508
UD_Isyscall = 509
UD_Isysenter = 510
UD_Isysexit = 511
UD_Isysret = 512
UD_Itest = 513
UD_Iucomisd = 514
UD_Iucomiss = 515
UD_Iud2 = 516
UD_Iunpckhpd = 517
UD_Iunpckhps = 518
UD_Iunpcklpd = 519
UD_Iunpcklps = 520
UD_Iverr = 521
UD_Iverw = 522
UD_Iwait = 523
UD_Iwbinvd = 524
UD_Iwrmsr = 525
UD_Ixadd = 526
UD_Ixchg = 527
UD_Ixlat = 528
UD_Ixlatb = 529
UD_Ixor = 530
UD_Ixorpd = 531
UD_Ixorps = 532
UD_Iinvalid = 533
UD_Igrp = 534
UD_Ia32 = 535
UD_Io32 = 536
UD_Ies = 537
UD_Ifs = 538
UD_Igs = 539
UD_Ics = 540
UD_Ids = 541
UD_Iss = 542
UD_Ix87 = 543
UD_I3dnow = 544
UD_Idb = 545
UD_Icmpxchg16b = 546
UD_Istosq = 547
UD_Iint3 = 548
UD_Imovsldup = 549
UD_Imovshdup = 550
UD_Imovddup = 551
UD_Irdtscp = 552
UD_Ivmrun = 553
UD_Ivmmcall = 554
UD_Ivmload = 555
UD_Ivmsave = 556
UD_Istgi = 557
UD_Iclgi = 558
UD_Iskinit = 559
UD_Iinvlpga = 560
UD_Ija = 561
UD_Ijae = 562
UD_Ijg = 563
UD_Ijge = 564
UD_Ijc = 565
UD_Ijnc = 566
UD_Ifisttp = 567
UD_Iprefetchnta = 568
UD_Iprefetcht0 = 569
UD_Iprefetcht1 = 570
UD_Iprefetcht2 = 571
UD_Icmovae = 572
UD_Icmova = 573
UD_Icmovge = 574
UD_Icmovg = 575
UD_Iseta = 576
UD_Isetge = 577
UD_Isetg = 578
UD_Ipause = 579
UD_Ina = 580
UD_Ihaddpd = 581
UD_Ihsubpd = 582
UD_Iaddsubpd = 583
UD_Ihaddps = 584
UD_Ihsubps = 585
UD_Iaddsubps = 586
UD_Ilddqu = 587
UD_Iint1 = 588
UD_Ivmcall = 589
UD_Ivmlaunch = 590
UD_Ivmresume = 591
UD_Ivmxoff = 592
UD_Imonitor = 593
UD_Imwait = 594
UD_Ivmptrld = 595
UD_Ivmptrst = 596
UD_Ivmclear = 597
UD_Ivmxon = 598
UD_Inone = 599

x86_type_values = [
    ('UD_OP_REG',140),
    ('UD_OP_MEM',141),
    ('UD_OP_PTR',142),
    ('UD_OP_IMM',143),
    ('UD_OP_JIMM',144),
    ('UD_OP_CONST',145),
    ]

x86_type_values_map = dict( [ (j,i) for i,j in x86_type_values ] )
for i,j in x86_type_values: globals()[i] = j
