The MASM Forum Archive 2004 to 2012
Welcome, Guest. Please login or register.
June 04, 2023, 09:42:54 AM

Login with username, password and session length
Search:     Advanced search
128553 Posts in 15254 Topics by 684 Members
Latest Member: mottt
* Home Help Search Login Register
+  The MASM Forum Archive 2004 to 2012
|-+  General Forums
| |-+  The Campus
| | |-+  EXE Jump Tables
« previous next »
Pages: 1 2 3 [4] 5 6 ... 9 Print
Author Topic: EXE Jump Tables  (Read 75854 times)
dedndave
Member
*****
Posts: 12523


Re: EXE Jump Tables
« Reply #45 on: May 31, 2009, 11:28:13 AM »

dual-core prescott....

13828614

direct indirect
------ --------
32608   32794
32285   33110
33037   33008
32435   33149
33087   32608
32551   33496
32165   28947
31687   31494
29901   31369
31580   30794
31328   31350
30840   30946
31516   30736
31468   31378
30782   31489
31116   31100
30823   31301
31092   32632
33431   31313
30686   30589
------ --------
634418  633603

as you can see, my numbers are slightly higher - lol
sumpin's not right, here - this dual-core @ 3 Ghz performs fairly well
Logged
MichaelW
Global Moderator
Member
*****
Gender: Male
Posts: 5161


Re: EXE Jump Tables
« Reply #46 on: May 31, 2009, 11:38:15 AM »

You're running XP? My numbers were for 2000.
Logged

eschew obfuscation
dedndave
Member
*****
Posts: 12523


Re: EXE Jump Tables
« Reply #47 on: May 31, 2009, 11:39:07 AM »

yes - xp sp2 - and holding - lol
Logged
jj2007
Member
*****
Gender: Male
Posts: 6011



Re: EXE Jump Tables
« Reply #48 on: May 31, 2009, 11:40:05 AM »

Why not try a "faster" API?

Code:
.nolist
include \masm32\include\masm32rt.inc
.686
include \masm32\macros\timers.asm
LOOP_COUNT = 100000

EXTERNDEF _imp__GetTickCount@0:PTR pr0

.code
start:
counter_begin LOOP_COUNT, HIGH_PRIORITY_CLASS
REPEAT 100
а аinvoke GetTickCount
ENDM
counter_end
print str$(eax), 9, "cycles for 100*GetTickCount, indirect", 13, 10

counter_begin LOOP_COUNT, HIGH_PRIORITY_CLASS
REPEAT 100
а invoke _imp__GetTickCount@0
ENDM
counter_end
print str$(eax), 9, "cycles for 100*GetTickCount, direct", 13, 10

inkey chr$(13, 10, "--- ok ---", 13)
exit
end start
Logged

dedndave
Member
*****
Posts: 12523


Re: EXE Jump Tables
« Reply #49 on: May 31, 2009, 11:46:16 AM »

yes - i was thinking the same thing
here is a short list of some that i think should be fast...

GetProcessAffinityMask
QueryPerformanceCounter
GetCurrentProcess
CreateTimerQueue
EnterCriticalSection
LeaveCriticalSection
Logged
dedndave
Member
*****
Posts: 12523


Re: EXE Jump Tables
« Reply #50 on: May 31, 2009, 11:50:39 AM »

i am seeing a 300 cycle diff JJ - 1700 vs 1400

but - all these timing measurements are going to prevent peeps from seeing my post about the replacement code - lol
(this sentance is intended to make them go back and look)
Logged
UtillMasm
Member
*****
Posts: 560

Please use a non offensive avatar


Re: EXE Jump Tables
« Reply #51 on: May 31, 2009, 11:51:42 AM »

Intel Core Duo 1.83Ghz with Vista SP2
Code:
9570552

direct indirect
------ --------
3661 а а4399
28143 а 9589
29073 а 23326
28886 а 28982
21307 а 16514
29851 а 37303
34544 а 14749
20351 а 1805
12799 а 10889
14832 а 28986
21583 а 13989
15321 а 6758
16165 а 15626
9959 а а1466
15746 а 23869
3090 а а2793
4223 а а2726
4613 а а3774
3178 а а1507
2827 а а1698
------ --------
320152 а250748

Press any key to exit...
Logged
MichaelW
Global Moderator
Member
*****
Gender: Male
Posts: 5161


Re: EXE Jump Tables
« Reply #52 on: May 31, 2009, 11:51:56 AM »

Quote
Why not try a "faster" API?

I did, I selected one that was faster than SendMessage. If you want to test something fast, forget the API and code a DLL with a procedure that contains only a RET, and call it by the same mechanisms.
Logged

eschew obfuscation
dedndave
Member
*****
Posts: 12523


Re: EXE Jump Tables
« Reply #53 on: May 31, 2009, 11:55:36 AM »

well - we know that result
it is certain synchronization calls that are of primary interest
but there are some fast APIs (just not the ones we always want to be fast - lol)

btw Michael - you are making me think about switching to Win2K - lol
Logged
MichaelW
Global Moderator
Member
*****
Gender: Male
Posts: 5161


Re: EXE Jump Tables
« Reply #54 on: May 31, 2009, 12:33:01 PM »

For a minimal procedure the direct call is consistently 2 cycles faster.
Code:
; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
а а include \masm32\include\masm32rt.inc

а а aret PROTO
; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
а а .data
а а а hInstance dd 0
а а .code
; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

LibMain proc instance:DWORD,reason:DWORD,unused:DWORD

а а .if reason == DLL_PROCESS_ATTACH
а а а push instance
а а а pop hInstance
а а а mov eax, TRUE

а а .elseif reason == DLL_PROCESS_DETACH

а а .elseif reason == DLL_THREAD_ATTACH

а а .elseif reason == DLL_THREAD_DETACH

а а .endif

а а ret

LibMain endp

; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

aret proc
а а ret
aret endp

; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

end LibMain
Code:
; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
а а include \masm32\include\masm32rt.inc
а а .686
а а include \masm32\macros\timers.asm

а а aret PROTO

а а EXTERNDEF _imp__aret@0:NEAR PTR
; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
а а .data
а а .code
; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
start:
; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
а а nops 3
а а call aret
а а nops 3
а а call _imp__aret@0
а а nops 3

а а invoke Sleep, 4000

а а counter_begin 1000, HIGH_PRIORITY_CLASS
а а а call aret
а а counter_end
а а print ustr$(eax)," cycles, indirect",13,10

а а counter_begin 1000, HIGH_PRIORITY_CLASS
а а а call _imp__aret@0
а а counter_end
а а print ustr$(eax)," cycles, direct",13,10,13,10

а а inkey "Press any key to exit..."
а а exit
; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл
end start

Code:
00401000 90а а а а а а а а а а аnop
00401001 90а а а а а а а а а а аnop
00401002 90а а а а а а а а а а аnop
00401003 E8F2010000а а а а а а аcallа а fn_004011FA
00401008 90а а а а а а а а а а аnop
00401009 90а а а а а а а а а а аnop
0040100A 90а а а а а а а а а а аnop
0040100B FF1530204000а а а а а аcallа а dword ptr [aret]
00401011 90а а а а а а а а а а аnop
00401012 90а а а а а а а а а а аnop
00401013 90а а а а а а а а а а аnop
. . .
004011FAа а а а а а а а а а fn_004011FA:
004011FA FF2530204000а а а а а аjmpа а аdword ptr [aret]
Code:
3 cycles, indirect
1 cycles, direct


[attachment deleted by admin]
Logged

eschew obfuscation
dedndave
Member
*****
Posts: 12523


Re: EXE Jump Tables
« Reply #55 on: May 31, 2009, 12:39:09 PM »

you guys are not paying attention
look at the code i posted
GET THE TARGET ADDRESS
Logged
MichaelW
Global Moderator
Member
*****
Gender: Male
Posts: 5161


Re: EXE Jump Tables
« Reply #56 on: May 31, 2009, 12:44:55 PM »

Who pays attention over the weekend?
Logged

eschew obfuscation
dedndave
Member
*****
Posts: 12523


Re: EXE Jump Tables
« Reply #57 on: May 31, 2009, 12:46:44 PM »

lol - is it the weekend already ?
Logged
UtillMasm
Member
*****
Posts: 560

Please use a non offensive avatar


Re: EXE Jump Tables
« Reply #58 on: May 31, 2009, 01:12:18 PM »

for great weekend. wink

btw: to dear MichaelW, which one for these text files? wink

[attachment deleted by admin]
Logged
MichaelW
Global Moderator
Member
*****
Gender: Male
Posts: 5161


Re: EXE Jump Tables
« Reply #59 on: May 31, 2009, 01:39:39 PM »

I can only guess ANSI or Western European.
Logged

eschew obfuscation
Pages: 1 2 3 [4] 5 6 ... 9 Print 
« previous next »
Jump to:  

Powered by MySQL Powered by PHP The MASM Forum Archive 2004 to 2012 | Powered by SMF 1.0.12.
© 2001-2005, Lewis Media. All Rights Reserved.
Valid XHTML 1.0! Valid CSS!