| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/developer/debug/zxdb/console/commands/verb_disassemble.h" |
| |
| #include <gtest/gtest.h> |
| |
| #include "src/developer/debug/zxdb/client/mock_remote_api.h" |
| #include "src/developer/debug/zxdb/console/console_test.h" |
| |
| namespace zxdb { |
| |
| namespace { |
| |
| class VerbDisassemble : public ConsoleTest {}; |
| |
| } // namespace |
| |
| TEST_F(VerbDisassemble, Test) { |
| mock_remote_api()->AddMemory( |
| 0x12340, |
| { |
| 0x64, 0x48, 0x8b, 0x04, 0x25, 0x18, 0x00, 0x00, 0x00, // mov rax, qword ptr fs:[0x18] |
| 0x48, 0x89, 0xc1, // mov rcx, rax |
| 0x48, 0x81, 0xc1, 0xf0, 0xfa, 0xff, 0xff, // add rcx, -0x510 |
| 0x64, 0x48, 0x89, 0x0c, 0x25, 0x18, 0x00, 0x00, 0x00, // mov qword ptr fs:[0x18], rcx |
| 0x48, 0x89, 0xc1, // mov rcx, rax |
| 0x48, 0x83, 0xc1, 0xf8, // add rcx, -0x8 |
| 0x64, 0x48, 0x8b, 0x14, 0x25, 0x10, 0x00, 0x00, 0x00, // mov rdx, qword ptr fs:[0x10] |
| 0x48, 0x89, 0x50, 0xf8, // mov qword ptr [rax - 0x8], rdx |
| 0xc7, 0x45, 0xfc, 0x00, 0x00, 0x00, 0x00 // mov dword ptr [rbp - 0x4], 0x0 |
| }); |
| |
| // Line-limited output with an explicit address. |
| console().ProcessInputLine("di -n 3 0x12340"); |
| auto event = console().GetOutputEvent(); |
| ASSERT_EQ(MockConsole::OutputEvent::Type::kOutput, event.type); |
| // NOTE: output has trailing spaces because it's the separator for the comment lines. There |
| // are no comments on these lines so it looks weird. |
| EXPECT_EQ( |
| " 0x12340 mov rax, qword ptr fs:[0x18] \n" |
| " 0x12349 mov rcx, rax \n" |
| " 0x1234c add rcx, -0x510 \n", |
| event.output.AsString()); |
| |
| // Default-length output with an expression and data bytes. This should output all of the memory |
| // because our data is less than the default line size (16 instructions). |
| console().ProcessInputLine("di -r *0x12340 + 9"); |
| event = console().GetOutputEvent(); |
| ASSERT_EQ(MockConsole::OutputEvent::Type::kOutput, event.type); |
| EXPECT_EQ( |
| " 0x12349 48 89 c1 mov rcx, rax \n" |
| " 0x1234c 48 81 c1 f0 fa ff ff add rcx, -0x510 \n" |
| " 0x12353 64 48 89 0c 25 18 00 00 00 mov qword ptr fs:[0x18], rcx \n" |
| " 0x1235c 48 89 c1 mov rcx, rax \n" |
| " 0x1235f 48 83 c1 f8 add rcx, -0x8 \n" |
| " 0x12363 64 48 8b 14 25 10 00 00 00 mov rdx, qword ptr fs:[0x10] \n" |
| " 0x1236c 48 89 50 f8 mov qword ptr [rax - 0x8], rdx \n" |
| " 0x12370 c7 45 fc 00 00 00 00 mov dword ptr [rbp - 0x4], 0x0 \n", |
| event.output.AsString()); |
| } |
| |
| } // namespace zxdb |