- Added fullMode input in workflow_dispatch
- Take decision whether to build either in debug or release mode and if to build for all python versions according to the commit message patterns
- Set proper artifact names
- Removed not needed steps
- Compacted some steps in order to leverage more the matrix feature
- Bumped cibuildwheel action to 2.22.0
- Run actual regress tests in place of sample scripts
- Specify optional test install in pyproject.toml with proper requirements
- Derive package version from git tags
- Add GENERATORS env var support in setup.py to specify cmake generator and minor refactoring
- Minor cleanup/refactoring for the regress test suite
- Marked some regress tests with skipIf to skip them in case of old python versions
- Marked some failing regress tests to be checked with skipIf
43 lines
1.1 KiB
Python
Executable File
43 lines
1.1 KiB
Python
Executable File
import os
|
|
import regress
|
|
from unicorn import *
|
|
from unicorn.x86_const import *
|
|
|
|
# The file we're loading is a full assembled ELF.
|
|
# Source for it, along with assembly instructions, are in x86_self_modifying.s
|
|
filename = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'x86_self_modifying.elf')
|
|
|
|
CODE_ADDR = 0x08048000
|
|
STACK_ADDR = 0x2000000
|
|
with open(filename, 'rb') as f:
|
|
CODE = f.read()
|
|
CODE_SIZE = len(CODE) + (0x1000 - len(CODE) % 0x1000)
|
|
STACK_SIZE = 0x8000
|
|
|
|
ENTRY_POINT = 0x8048074
|
|
|
|
|
|
def hook_intr(uc, intno, data):
|
|
uc.emu_stop()
|
|
|
|
|
|
class SelfModifying(regress.RegressTest):
|
|
def test_self_modifying(self):
|
|
uc = Uc(UC_ARCH_X86, UC_MODE_32)
|
|
|
|
uc.mem_map(CODE_ADDR, CODE_SIZE, 5)
|
|
uc.mem_map(STACK_ADDR, STACK_SIZE, 7)
|
|
uc.mem_write(CODE_ADDR, CODE)
|
|
uc.reg_write(UC_X86_REG_ESP, STACK_ADDR + STACK_SIZE)
|
|
|
|
uc.hook_add(UC_HOOK_INTR, hook_intr)
|
|
|
|
uc.emu_start(ENTRY_POINT, -1)
|
|
|
|
retcode = uc.reg_read(UC_X86_REG_EBX)
|
|
self.assertEqual(retcode, 65)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
regress.main()
|