我从博客(http://technapstar.blogspot.fi/2014/07/automation-with-pywinauto.html)中了解到关于启动谷歌浏览器并通过 pywinauto 输入网址的方法如下:
Python 3.6.1rc1 (v3.6.1rc1^0:e0fbe5feee4f9c00f09eb9659c2182183036261a, Mar 4 2017, 20:00:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import pywinauto
>>> pywinauto.__version__
'0.6.2'
>>> from pywinauto.application import Application
>>> app = Application().start("chrome.exe")
Warning (from warnings module):
File "D:\Python\lib\site-packages\pywinauto\application.py", line 982
UserWarning)
UserWarning: 32-bit application should be automated using 32-bit Python (you use 64-bit Python)
>>> app.window_(title='New Tab')
<pywinauto.application.WindowSpecification object at 0x0000000002FFABE0>
>>> app.window_().TypeKeys('{F6}')
<pywinauto.controls.hwndwrapper.DialogWrapper object at 0x0000000004258320>
>>> app.window_().TypeKeys('{ESC}')
<pywinauto.controls.hwndwrapper.DialogWrapper …Run Code Online (Sandbox Code Playgroud) 这是一个很简单的汇编程序,12执行完就返回。
$ cat a.asm
global _start
section .text
_start: mov rax, 60 ; system call for exit
mov rdi, 12 ; exit code 12
syscall
Run Code Online (Sandbox Code Playgroud)
它可以正确构建和执行:
$ nasm -f elf64 a.asm && ld a.o && ./a.out || echo $?
12
Run Code Online (Sandbox Code Playgroud)
但是a.out的大小很大,超过4k:
$ wc -c a.out
4664 a.out
Run Code Online (Sandbox Code Playgroud)
我尝试通过阅读精灵内容来理解它:
$ readelf -l a.out
Elf file type is EXEC (Executable file)
Entry point 0x401000
There are 2 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz …Run Code Online (Sandbox Code Playgroud) 我写了一个小bootloader用于学习目的,它会打印出bootloader第一条指令的内存地址,肯定是0x7c00。看下面的汇编源代码运行良好。
boot.s
.code16
.global init
init:
mov $0x07c0, %ax
mov %ax, %ds
mov $0x07e0, %ax
mov %ax, %ss
mov $0x2000, %sp
call next
next:
pop %bx
sub $(next-init), %bx # starting point of memory address, now stored in %bx
call print_register
jmp .
print_register: # always print out value in %bx
mov %bh, %cl
shr $0x4, %cl
and $0x0f, %cl
call print_digit
mov %bh, %cl
and $0x0f, %cl
call print_digit
mov %bl, %cl
shr $0x4, %cl
and $0x0f, %cl
call …Run Code Online (Sandbox Code Playgroud)