📄 tstril.asm
字号:
mov r3, #3
str r3, [sp]
; 305 : wc.lpfnWndProc = (WNDPROC) WndProc;
ldr r2, [pc, #0x5C] ; pc+8+92 = 00000D58
str r2, [sp, #4]
; 306 : wc.cbClsExtra = 0;
mov r1, #0
str r1, [sp, #8]
; 307 : wc.cbWndExtra = 0;
mov r0, #0
str r0, [sp, #0xC] ; 0xC = 12
; 308 : wc.hInstance = hInstance;
ldr lr, [sp, #0x30] ; 0x30 = 48
str lr, [sp, #0x10] ; 0x10 = 16
; 309 : wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TSTRIL));
mov r1, #0x65 ; 0x65 = 101
ldr r0, [sp, #0x30] ; 0x30 = 48
bl LoadIconW ; 00000D24
str r0, [sp, #0x14] ; 0x14 = 20
; 310 : wc.hCursor = 0;
mov r3, #0
str r3, [sp, #0x18] ; 0x18 = 24
; 311 : wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
mov r0, #0
bl GetStockObject ; 00000D38
str r0, [sp, #0x1C] ; 0x1C = 28
; 312 : wc.lpszMenuName = 0;
mov r2, #0
str r2, [sp, #0x20] ; 0x20 = 32
; 313 : wc.lpszClassName = szWindowClass;
ldr r1, [sp, #0x34] ; 0x34 = 52
str r1, [sp, #0x24] ; 0x24 = 36
; 314 :
; 315 : return RegisterClass(&wc);
add r0, sp, #0
bl RegisterClassW ; 00000D54
; 316 : }
add sp, sp, #0x28 ; 0x28 = 40
ldmia sp, {sp, pc} ; ldmfd
|$L27544|
DCD |?WndProc@@YAJPAUHWND__@@IIJ@Z|
|$M27542|
ENDP ; |?MyRegisterClass@@YAGPAUHINSTANCE__@@PAG@Z|, MyRegisterClass
IMPORT |MoveWindow|
IMPORT |GetWindowRect|
IMPORT |GetClientRect|
IMPORT |LoadStringW|
IMPORT |ShowWindow|
IMPORT |UpdateWindow|
IMPORT |FindWindowW|
IMPORT |CreateWindowExW|
IMPORT |SetForegroundWindow|
AREA |.pdata|, PDATA
|$T27548| DCD |?InitInstance@@YAHPAUHINSTANCE__@@H@Z|
DCD 0x40006204
AREA |.text|, CODE
|?InitInstance@@YAHPAUHINSTANCE__@@H@Z| PROC ; InitInstance
; 329 : {
mov r12, sp
stmdb sp!, {r0, r1} ; stmfd
stmdb sp!, {r12, lr} ; stmfd
sub sp, sp, #0x76, 30 ; 0x1D8 = 472
|$M27546|
; 330 : HWND hWnd = NULL;
mov r3, #0
str r3, [sp, #0x20] ; 0x20 = 32
; 331 : TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
; 332 : TCHAR szWindowClass[MAX_LOADSTRING]; // The window class name
; 333 :
; 334 : g_hInst = hInstance; // Store instance handle in our global variable
ldr r2, [sp, #0x1E0] ; 0x1E0 = 480
ldr r1, [pc, #0x60] ; pc+8+96 = 00000DE0
str r2, [r1]
; 335 : // Initialize global strings
; 336 : LoadString(hInstance, IDC_TSTRIL, szWindowClass, MAX_LOADSTRING);
mov r3, #0x64 ; 0x64 = 100
mov r2, #1, 24 ; 0x100 = 256
add r2, sp, r2
mov r1, #3
ldr r0, [sp, #0x1E0] ; 0x1E0 = 480
bl LoadStringW ; 00000D9C
; 337 : LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
mov r3, #0x64 ; 0x64 = 100
add r2, sp, #0x38 ; 0x38 = 56
mov r1, #1
ldr r0, [sp, #0x1E0] ; 0x1E0 = 480
bl LoadStringW ; 00000DB0
; 338 :
; 339 : //If it is already running, then focus on the window
; 340 : hWnd = FindWindow(szWindowClass, szTitle);
add r1, sp, #0x38 ; 0x38 = 56
mov r0, #1, 24 ; 0x100 = 256
add r0, sp, r0
bl FindWindowW ; 00000DC0
str r0, [sp, #0x20] ; 0x20 = 32
; 341 : if (hWnd)
ldr r0, [sp, #0x20] ; 0x20 = 32
cmp r0, #0
beq |$L27393| ; 00000DE4
; 342 : {
; 343 : // set focus to foremost child window
; 344 : // The "| 0x01" is used to bring any owned windows to the foreground and
; 345 : // activate them.
; 346 : SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
ldr lr, [sp, #0x20] ; 0x20 = 32
orr r0, lr, #1
bl SetForegroundWindow ; 00000DDC
; 347 : return 0;
mov r0, #0
b |$L27389| ; 00000ED8
|$L27549|
DCD |?g_hInst@@3PAUHINSTANCE__@@A|
|$L27393|
; 348 : }
; 349 :
; 350 : MyRegisterClass(hInstance, szWindowClass);
mov r1, #1, 24 ; 0x100 = 256
add r1, sp, r1
ldr r0, [sp, #0x1E0] ; 0x1E0 = 480
bl |?MyRegisterClass@@YAGPAUHINSTANCE__@@PAG@Z| ; 00000DF8
; 351 :
; 352 : RECT rect;
; 353 : GetClientRect(hWnd, &rect);
add r1, sp, #0x28 ; 0x28 = 40
ldr r0, [sp, #0x20] ; 0x20 = 32
bl GetClientRect ; 00000E04
; 354 :
; 355 : hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
; 356 : CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
mov r3, #0
str r3, [sp, #0x1C] ; 0x1C = 28
ldr r2, [sp, #0x1E0] ; 0x1E0 = 480
str r2, [sp, #0x18] ; 0x18 = 24
mov r1, #0
str r1, [sp, #0x14] ; 0x14 = 20
mov r0, #0
str r0, [sp, #0x10] ; 0x10 = 16
mov lr, #2, 2 ; 0x80000000 = 2147483648
str lr, [sp, #0xC] ; 0xC = 12
mov r3, #2, 2 ; 0x80000000 = 2147483648
str r3, [sp, #8]
mov r2, #2, 2 ; 0x80000000 = 2147483648
str r2, [sp, #4]
mov r1, #2, 2 ; 0x80000000 = 2147483648
str r1, [sp]
mov r3, #1, 4 ; 0x10000000 = 268435456
add r2, sp, #0x38 ; 0x38 = 56
mov r1, #1, 24 ; 0x100 = 256
add r1, sp, r1
mov r0, #0
bl CreateWindowExW ; 00000E5C
str r0, [sp, #0x20] ; 0x20 = 32
; 357 : if (!hWnd)
ldr r0, [sp, #0x20] ; 0x20 = 32
cmp r0, #0
bne |$L27401| ; 00000E70
; 358 : {
; 359 : return FALSE;
mov r0, #0
b |$L27389| ; 00000ED8
|$L27401|
; 360 : }
; 361 : //When the main window is created using CW_USEDEFAULT the height of the menubar (if one
; 362 : // is created is not taken into account). So we resize the window after creating it
; 363 : // if a menubar is present
; 364 : {
; 365 : RECT rc;
; 366 : GetWindowRect(hWnd, &rc);
mov r1, #0x72, 30 ; 0x1C8 = 456
add r1, sp, r1
ldr r0, [sp, #0x20] ; 0x20 = 32
bl GetWindowRect ; 00000E84
; 367 : rc.bottom -= MENU_HEIGHT;
ldr lr, [sp, #0x1D4] ; 0x1D4 = 468
sub r3, lr, #0x1A ; 0x1A = 26
str r3, [sp, #0x1D4] ; 0x1D4 = 468
; 368 : if (g_hwndCB)
ldr r2, [pc, #0x4C] ; pc+8+76 = 00000EE0
ldr r1, [r2]
cmp r1, #0
beq |$L27403| ; 00000EC0
; 369 : MoveWindow(hWnd, rc.left, rc.top, rc.right, rc.bottom, FALSE);
mov r0, #0
str r0, [sp, #4]
ldr lr, [sp, #0x1D4] ; 0x1D4 = 468
str lr, [sp]
ldr r3, [sp, #0x1D0] ; 0x1D0 = 464
ldr r2, [sp, #0x1CC] ; 0x1CC = 460
ldr r1, [sp, #0x1C8] ; 0x1C8 = 456
ldr r0, [sp, #0x20] ; 0x20 = 32
bl MoveWindow ; 00000EC4
|$L27403|
; 370 : }
; 371 :
; 372 :
; 373 : ShowWindow(hWnd, nCmdShow);
ldr r1, [sp, #0x1E4] ; 0x1E4 = 484
ldr r0, [sp, #0x20] ; 0x20 = 32
bl ShowWindow ; 00000ED0
; 374 : UpdateWindow(hWnd);
ldr r0, [sp, #0x20] ; 0x20 = 32
bl UpdateWindow ; 00000ED8
; 375 :
; 376 : return TRUE;
mov r0, #1
|$L27389|
; 377 : }
add sp, sp, #0x76, 30 ; 0x1D8 = 472
ldmia sp, {sp, pc} ; ldmfd
|$L27550|
DCD |?g_hwndCB@@3PAUHWND__@@A|
|$M27547|
ENDP ; |?InitInstance@@YAHPAUHINSTANCE__@@H@Z|, InitInstance
EXPORT |?About@@YAJPAUHWND__@@IIJ@Z| ; About
EXPORT |?CreateRpCommandBar@@YAPAUHWND__@@PAU1@@Z| ; CreateRpCommandBar
IMPORT |CloseHandle|
IMPORT |LoadResource|
IMPORT |FindResourceW|
IMPORT |CreateThread|
IMPORT |DefWindowProcW|
IMPORT |BeginPaint|
IMPORT |EndPaint|
IMPORT |SHHandleWMActivate|
IMPORT |memset|
IMPORT |SHHandleWMSettingChange|
IMPORT |DialogBoxIndirectParamW|
IMPORT |DestroyWindow|
IMPORT |PostQuitMessage|
AREA |.bss|, NOINIT
|s_sai| % 0xc
|$SG27446| % 0x2
AREA |.pdata|, PDATA
|$T27555| DCD |?WndProc@@YAJPAUHWND__@@IIJ@Z|
DCD 0x4000f604
AREA |.data|, DATA
|$SG27447| DCB "l", 0x0, "i", 0x0, "s", 0x0, "t", 0x0, "b", 0x0, "o", 0x0
DCB "x", 0x0, 0x0, 0x0
|$SG27450| DCB "E", 0x0, "r", 0x0, "r", 0x0, "o", 0x0, "r", 0x0, 0x0, 0x0
|$SG27451| DCB "U", 0x0, "n", 0x0, "a", 0x0, "b", 0x0, "l", 0x0, "e", 0x0
DCB " ", 0x0, "t", 0x0, "o", 0x0, " ", 0x0, "c", 0x0, "r", 0x0
DCB "e", 0x0, "a", 0x0, "t", 0x0, "e", 0x0, " ", 0x0, "t", 0x0
DCB "h", 0x0, "e", 0x0, " ", 0x0, "R", 0x0, "I", 0x0, "L", 0x0
DCB " ", 0x0, "t", 0x0, "h", 0x0, "r", 0x0, "e", 0x0, "a", 0x0
DCB "d", 0x0, 0x0, 0x0
AREA |.text|, CODE
|?WndProc@@YAJPAUHWND__@@IIJ@Z| PROC ; WndProc
; 390 : {
mov r12, sp
stmdb sp!, {r0 - r3} ; stmfd
stmdb sp!, {r12, lr} ; stmfd
sub sp, sp, #0x98 ; 0x98 = 152
|$M27553|
; 391 : HDC hdc;
; 392 : int wmId, wmEvent;
; 393 : PAINTSTRUCT ps;
; 394 : DWORD dwError, dwThreadID;
; 395 : HANDLE hReadThread = NULL;
mov r3, #0
str r3, [sp, #0x20] ; 0x20 = 32
; 396 :
; 397 : switch (message)
; 398 : {
ldr r2, [sp, #0xA4] ; 0xA4 = 164
str r2, [sp, #0x90] ; 0x90 = 144
ldr r1, [sp, #0x90] ; 0x90 = 144
cmp r1, #6
bhi |$L27552| ; 00000F44
ldr r0, [sp, #0x90] ; 0x90 = 144
cmp r0, #6
beq |$L27459| ; 00001260
ldr lr, [sp, #0x90] ; 0x90 = 144
cmp lr, #1
beq |$L27445| ; 000010A4
ldr r3, [sp, #0x90] ; 0x90 = 144
cmp r3, #2
beq |$L27458| ; 00001248
ldr r2, [sp, #0x90] ; 0x90 = 144
cmp r2, #5
beq |$L27452| ; 000011BC
b |$L27461| ; 00001298
|$L27552|
ldr r1, [sp, #0x90] ; 0x90 = 144
cmp r1, #0xF ; 0xF = 15
beq |$L27456| ; 0000121C
ldr r0, [sp, #0x90] ; 0x90 = 144
cmp r0, #0x1A ; 0x1A = 26
beq |$L27460| ; 00001280
ldr lr, [sp, #0x90] ; 0x90 = 144
mov r3, #0x11, 28 ; 0x110 = 272
orr r2, r3, #1
cmp lr, r2
beq |$L27421| ; 00000F74
b |$L27461| ; 00001298
|$L27421|
; 399 : case WM_COMMAND:
; 400 : wmId = LOWORD(wParam);
ldr r1, [sp, #0xA8] ; 0xA8 = 168
mov r0, r1, lsl #16
mov lr, r0, lsr #16
mov r3, lr, lsl #16
mov r2, r3, lsr #16
str r2, [sp, #0x28] ; 0x28 = 40
; 401 : wmEvent = HIWORD(wParam);
ldr r1, [sp, #0xA8] ; 0xA8 = 168
mov r0, r1, lsr #16
mov lr, #0xFF, 24 ; 0xFF00 = 65280
orr r3, lr, #0xFF ; 0xFF = 255
and r2, r0, r3
mov r1, r2, lsl #16
mov r0, r1, lsr #16
mov lr, r0, lsl #16
mov r3, lr, lsr #16
str r3, [sp, #0x78] ; 0x78 = 120
; 402 : // Parse the menu selections:
; 403 : switch (wmId)
; 404 : {
ldr r2, [sp, #0x28] ; 0x28 = 40
str r2, [sp, #0x94] ; 0x94 = 148
ldr r1, [sp, #0x94] ; 0x94 = 148
cmp r1, #1
beq |$L27437| ; 0000105C
ldr r0, [sp, #0x94] ; 0x94 = 148
mov lr, #0x27, 22 ; 0x9C00 = 39936
orr r3, lr, #0x43 ; 0x43 = 67
cmp r0, r3
beq |$L27430| ; 0000100C
ldr r2, [sp, #0x94] ; 0x94 = 148
mov r1, #0x27, 22 ; 0x9C00 = 39936
orr r0, r1, #0x44 ; 0x44 = 68
cmp r2, r0
beq |$L27429| ; 00000FF4
b |$L27444| ; 00001088
|$L27429|
; 405 : case IDM_TOOLS_EXIT:
; 406 : return SendMessage (hWnd, WM_CLOSE, 0, 0);
mov r3, #0
mov r2, #0
mov r1, #0x10 ; 0x10 = 16
ldr r0, [sp, #0xA0] ; 0xA0 = 160
bl SendMessageW ; 0000100C
b |$L27409| ; 000012B4
|$L27430|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -