Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:00.05 --> 00:00:01.05
- [Instructor] Let's check out the second
2
00:00:01.05 --> 00:00:03.02
dissembler we've loaded.
3
00:00:03.02 --> 00:00:07.01
We'll select GoAsm 64
4
00:00:07.01 --> 00:00:09.03
in the configuration.
5
00:00:09.03 --> 00:00:12.07
We'll select a classic console application
6
00:00:12.07 --> 00:00:19.07
and we'll call the project goatest.
7
00:00:19.07 --> 00:00:21.08
Okay.
8
00:00:21.08 --> 00:00:23.03
Easy code opens up the project
9
00:00:23.03 --> 00:00:24.09
with skeleton code,
10
00:00:24.09 --> 00:00:29.05
but we'll remove this and we'll do all the coding ourselves.
11
00:00:29.05 --> 00:00:30.09
The first thing we need to do
12
00:00:30.09 --> 00:00:37.02
is check the project properties in the tools tab.
13
00:00:37.02 --> 00:00:39.05
We can see where I've set the paths
14
00:00:39.05 --> 00:00:41.05
for the GoAsm, assembler, linker,
15
00:00:41.05 --> 00:00:45.01
and resource compiler tools.
16
00:00:45.01 --> 00:00:50.06
We'll also go into tools, settings,
17
00:00:50.06 --> 00:00:53.04
and we'll set the default configuration for new projects
18
00:00:53.04 --> 00:00:58.09
to GoAsm 64 and on the tools tab,
19
00:00:58.09 --> 00:01:04.08
we'll check the debugger path.
20
00:01:04.08 --> 00:01:14.08
And set it to X64debug.exe.
21
00:01:14.08 --> 00:01:17.09
We'll apply that and close.
22
00:01:17.09 --> 00:01:20.05
Let's now put in another simple hello world program
23
00:01:20.05 --> 00:01:23.01
this time using GoAsm.
24
00:01:23.01 --> 00:01:25.05
Again we won't worry about the coding at this stage.
25
00:01:25.05 --> 00:01:26.09
All we want to do is check
26
00:01:26.09 --> 00:01:29.08
we have a good installation of GoAsm.
27
00:01:29.08 --> 00:01:33.07
We'll start with the data section
28
00:01:33.07 --> 00:01:36.06
and define a field for the number of bytes written
29
00:01:36.06 --> 00:01:45.08
to be returned as a 64 bit value till you count dq 0.
30
00:01:45.08 --> 00:01:49.05
We'll define a hello world message string.
31
00:01:49.05 --> 00:02:03.08
Hello db hello 64 world from GoAsm.
32
00:02:03.08 --> 00:02:09.01
Now for the code section .code.
33
00:02:09.01 --> 00:02:10.03
And the default entry point
34
00:02:10.03 --> 00:02:14.04
is to start label again start.
35
00:02:14.04 --> 00:02:16.07
We can use the assemblers macro capability
36
00:02:16.07 --> 00:02:18.05
to define arguments.
37
00:02:18.05 --> 00:02:21.09
In this case, we'll set the value to minus 11,
38
00:02:21.09 --> 00:02:24.00
to invoke a request for standard windows,
39
00:02:24.00 --> 00:02:31.04
API console output handle arg minus 11,
40
00:02:31.04 --> 00:02:36.04
and we'll invoke get standard handle invoke,
41
00:02:36.04 --> 00:02:42.04
get standard handle.
42
00:02:42.04 --> 00:02:43.05
Next, we'll set up a call
43
00:02:43.05 --> 00:02:45.02
to display the message.
44
00:02:45.02 --> 00:02:48.04
We'll be invoking the windows right file function.
45
00:02:48.04 --> 00:02:50.07
And again, using the arg and invoke macros
46
00:02:50.07 --> 00:02:52.08
to set up the parameters.
47
00:02:52.08 --> 00:02:54.07
These are coded in the reverse order
48
00:02:54.07 --> 00:02:57.00
to the Wynn API documentation,
49
00:02:57.00 --> 00:02:58.00
starting with a zero
50
00:02:58.00 --> 00:03:00.02
to specify no overlap.
51
00:03:00.02 --> 00:03:02.02
The address of the return number of bytes written
52
00:03:02.02 --> 00:03:03.01
in the number of bytes
53
00:03:03.01 --> 00:03:05.01
we want to write,
54
00:03:05.01 --> 00:03:17.04
arg 0,addr wcount,27.
55
00:03:17.04 --> 00:03:20.09
Then we provide as arguments
56
00:03:20.09 --> 00:03:26.01
the address of our string address hello,
57
00:03:26.01 --> 00:03:29.09
and the 64 bit register rax
58
00:03:29.09 --> 00:03:31.09
in which we'll pass the handle that we received
59
00:03:31.09 --> 00:03:35.03
from the previous invoke core.
60
00:03:35.03 --> 00:03:39.00
We can now invoke the right to the console
61
00:03:39.00 --> 00:03:46.02
invoke right file.
62
00:03:46.02 --> 00:03:48.05
Finally, we'll use an exclusive or trig
63
00:03:48.05 --> 00:03:50.01
to clear the rax register,
64
00:03:50.01 --> 00:03:53.09
which holds the exit code for the program.
65
00:03:53.09 --> 00:04:01.04
Xor rax,rax and ret.
66
00:04:01.04 --> 00:04:09.03
Okay, let's go to build build goatest.exe.
67
00:04:09.03 --> 00:04:10.09
In the console at the bottom,
68
00:04:10.09 --> 00:04:13.03
we can see we've got no errors.
69
00:04:13.03 --> 00:04:15.08
We should also check our debugger.
70
00:04:15.08 --> 00:04:19.02
Let's go to build debug,
71
00:04:19.02 --> 00:04:23.05
goatest.exe and easy code passes us through
72
00:04:23.05 --> 00:04:25.07
to the X64debug program,
73
00:04:25.07 --> 00:04:28.01
which also provides command shell.
74
00:04:28.01 --> 00:04:30.07
I'll minimize the command shell,
75
00:04:30.07 --> 00:04:33.00
and maximize the debugger.
76
00:04:33.00 --> 00:04:33.08
Okay.
77
00:04:33.08 --> 00:04:34.08
To start debugging.
78
00:04:34.08 --> 00:04:37.01
We press the icon with the person showing,
79
00:04:37.01 --> 00:04:38.08
which runs the code through
80
00:04:38.08 --> 00:04:41.06
to our user code.
81
00:04:41.06 --> 00:04:45.01
We can see where it's address 401000.
82
00:04:45.01 --> 00:04:46.06
And we can see some preliminary
83
00:04:46.06 --> 00:04:48.07
instructions before we do a move a
84
00:04:48.07 --> 00:04:51.00
to address 401008,
85
00:04:51.00 --> 00:04:52.08
where we can see a lot of Fs
86
00:04:52.08 --> 00:04:57.04
and finishing with a five that's minus 11 in hexadecimal.
87
00:04:57.04 --> 00:04:58.09
Following that we can see a call
88
00:04:58.09 --> 00:05:01.03
to get standard handle.
89
00:05:01.03 --> 00:05:02.07
We can see here the value
90
00:05:02.07 --> 00:05:04.09
of using a simple arg and invoke,
91
00:05:04.09 --> 00:05:08.01
which saved us writing six instructions.
92
00:05:08.01 --> 00:05:12.09
Let's step through this by pressing F8,
93
00:05:12.09 --> 00:05:17.00
as we get to instruction 401012.
94
00:05:17.00 --> 00:05:21.04
We can see this RCX has now changed to negative 11.
95
00:05:21.04 --> 00:05:22.03
We don't need to spend a lot
96
00:05:22.03 --> 00:05:24.06
of time looking at the code at this stage,
97
00:05:24.06 --> 00:05:30.06
but if we step down to 401047,
98
00:05:30.06 --> 00:05:34.07
and then step over that we can check the console
99
00:05:34.07 --> 00:05:38.03
and we can see that our message has appeared.
100
00:05:38.03 --> 00:05:40.03
Okay, back in the debugger,
101
00:05:40.03 --> 00:05:44.03
we can run to the end of the program
102
00:05:44.03 --> 00:05:47.03
and close the debugger.
103
00:05:47.03 --> 00:05:50.00
Right, we've now got the easy code ID set up
104
00:05:50.00 --> 00:05:52.04
with the X64 debugger installed and running.
105
00:05:52.04 --> 00:05:55.03
Or we can choose to use either the masm
106
00:05:55.03 --> 00:05:57.06
or the GoAsm assemblers.
107
00:05:57.06 --> 00:05:59.04
We're all set for development.
108
00:05:59.04 --> 00:06:00.02
And for this course,
109
00:06:00.02 --> 00:06:03.02
we'll be focusing on the GoAsm 64 assembler.
8065
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.