1 : // Copyright 2015 Google Inc. All Rights Reserved.
2 : //
3 : // Licensed under the Apache License, Version 2.0 (the "License");
4 : // you may not use this file except in compliance with the License.
5 : // You may obtain a copy of the License at
6 : //
7 : // http://www.apache.org/licenses/LICENSE-2.0
8 : //
9 : // Unless required by applicable law or agreed to in writing, software
10 : // distributed under the License is distributed on an "AS IS" BASIS,
11 : // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 : // See the License for the specific language governing permissions and
13 : // limitations under the License.
14 :
15 : #include "syzygy/refinery/analyzers/analyzer_util.h"
16 :
17 : #include "base/logging.h"
18 : #include "syzygy/refinery/process_state/refinery.pb.h"
19 :
20 m : namespace refinery {
21 :
22 m : void ParseContext(const CONTEXT& ctx, RegisterInformation* register_info) {
23 m : DCHECK(register_info != nullptr);
24 m : if (ctx.ContextFlags & CONTEXT_SEGMENTS) {
25 m : register_info->set_seg_gs(ctx.SegGs);
26 m : register_info->set_seg_fs(ctx.SegFs);
27 m : register_info->set_seg_es(ctx.SegEs);
28 m : register_info->set_seg_ds(ctx.SegDs);
29 m : }
30 m : if (ctx.ContextFlags & CONTEXT_INTEGER) {
31 m : register_info->set_edi(ctx.Edi);
32 m : register_info->set_esi(ctx.Esi);
33 m : register_info->set_ebx(ctx.Ebx);
34 m : register_info->set_edx(ctx.Edx);
35 m : register_info->set_ecx(ctx.Ecx);
36 m : register_info->set_eax(ctx.Eax);
37 m : }
38 m : if (ctx.ContextFlags & CONTEXT_CONTROL) {
39 m : register_info->set_ebp(ctx.Ebp);
40 m : register_info->set_eip(ctx.Eip);
41 m : register_info->set_seg_cs(ctx.SegCs);
42 m : register_info->set_eflags(ctx.EFlags);
43 m : register_info->set_esp(ctx.Esp);
44 m : register_info->set_seg_ss(ctx.SegSs);
45 m : }
46 m : }
47 :
48 m : SimpleProcessAnalysis::SimpleProcessAnalysis(ProcessState* process_state)
49 m : : process_state_(process_state) {
50 m : }
51 m : SimpleProcessAnalysis::SimpleProcessAnalysis(
52 m : ProcessState* process_state,
53 m : scoped_refptr<DiaSymbolProvider> dia_symbol_provider,
54 m : scoped_refptr<SymbolProvider> symbol_provider)
55 m : : process_state_(process_state),
56 m : dia_symbol_provider_(dia_symbol_provider),
57 m : symbol_provider_(symbol_provider) {
58 m : }
59 :
60 m : ProcessState* SimpleProcessAnalysis::process_state() const {
61 m : return process_state_;
62 m : }
63 :
64 m : scoped_refptr<DiaSymbolProvider> SimpleProcessAnalysis::dia_symbol_provider()
65 m : const {
66 : // TODO(siggi): Should there be a non-null assert here?
67 m : return dia_symbol_provider_;
68 m : }
69 :
70 m : scoped_refptr<SymbolProvider> SimpleProcessAnalysis::symbol_provider() const {
71 : // TODO(siggi): Should there be a non-null assert here?
72 m : return symbol_provider_;
73 m : }
74 :
75 m : } // namespace refinery
|