Разобрать по составу приятного: Приятного — разбор слова по составу (морфемный разбор)

синтаксис — «У всех было приятное настроение»: правильная грамматическая основа

Перво-наперво. Если вопрос был чисто школьный, о том как учительнице отвечать, то надо отвечать так, как учительница считает. Скорее всего в школе действительно не заморачиваются и принимают за сказуемое то, что лежит на поверхности, т.е. принимают настроение за подлежащее со всеми вытекающими последствиями.

Сложнее с принципиальными разногласиями по поводу структуры. Перечитал я всё тут сказанное.

Во-первых, за сказуемое можно счесть было приятное настроение, но при таком подходе выносить «приятное» за пределы сказуемого было бы нелогичным. Так как нарушалась бы иерархическая структура: некий член предложения (определение «приятное») относился бы к части другого члена (сказуемого «настроение»), не являясь при этом частью самого такого члена (сказуемого).

Остаётся два варианта. Сказуемое «было» и сказуемое «было приятное настроение».

Похоже, камень преткновения в том, как вообще трактовать грамматику.

если полагать, что язык вещь субъективная — и его можно трактовать как нам заблагорассудиться (лишь бы не противоречиво), то в соображениях @Ларf (примерно означающих, что все подходы могут быть правильны, но на деле всегда правилен тот, который нам больше подходит) есть резон.
Но я-то всегда придерживался той позиции, что язык — вещь объективная (за исключением правил правописания) и от наших взглядов на него никак не зависит. Поэтому вопрос о реальном сказуемом вполне уместен. Или придется признать, что у языка две взаимоисключающие грамматики. Но в определении таких базовых вещей как подлежащее, сказуемое, грамматическая основа и проч. существующие описания грамматики никак не расходятся, во всяком случае — не противоречат друг другу. Следовательно, у задачи должен быть один-единственный объективный ответ.

Чем руководствуются сторонники школьного подхода («было» — сказуемое, «настроение» подлежащее)? Только тем, что имеет место согласование (координация) в числе и роде.

Никаких других неавторитарных доводов более не увидел. насколько это довод справедлис — и насколько он императивен? Боюсь, что координация здесь далеко не абсолютная. Примеры с «У них было по рублю» я приводил. Чтобы «отмести» этот контрпример потребовалось сразу же изменить грамматику предложения. Я с таким подходом не согласен. Почему вдруг должна меняться грамматика, если я всего лишь одну «ячейку» структуры заполняю другим словом той же грамматической функции — и подлежащее без видимых причин становится дополнением?

С другой стороны, помимо упомянутого требования единства структуры безотносительно к наполнению, есть соображение, что в номинативных языках субъект (производитель действия) и подлежащее — суть одно и то же. «Настроение» никак не может быть производителем действия, это пациенс. Агенс — «все». И я все более склоняюсь к этой трактовке. Все вместе (было хорошее настроение) — сказуемое

Да, забыл сказать, почему настроение — не дополнение. Попробую для простоты на другом примере. У Васи были родители (вчера, в гостях) — У Васи [находятся] родители. У Васи были родители (вообще, он не сирота) — У Васи есть родители. В первом случае родители — подлежащее, «были» — смысловой глагол. Во втором — глагол связка. Под какой случай подходит «У всех было хорошее настроение»? Я сно, что под второй. Т.е. Если «настроение» — дополнение, то «есть» — глагол связка. Но при нём дополнение в виде именительного падежа (т.е. объектный именительного) возможно только в конструкциях типа «Я — человек» (хотя и тут логичнее «[есть] человек» считать сказуемым). У нас ничего похожего нет. так что доаолнение я на самом деле исключаю.

ЗЫ Я очень надеюсь, что количество минусов не превысит количество критических содержательных комментариев.

c++ — Как дизассемблировать бинарный исполняемый файл в Linux, чтобы получить ассемблерный код?

Этот ответ относится к x86. Портативные инструменты, которые могут дизассемблировать AArch64, MIPS или любой другой машинный код, включают objdump и llvm-objdump .


Дизассемблер Агнера Фога, objconv , довольно приятный. Он добавит комментарии к выходным данным дизассемблирования для проблем с производительностью (например, страшная задержка LCP из-за инструкций с 16-битными непосредственными константами).

 objconv -fyasm a.out /dev/stdout | меньше
 

(Он не распознает - как сокращение для stdout и по умолчанию выводит в файл с таким же именем, что и входной файл, с добавленным .asm .)

Он также добавляет цели ветвления в код . Другие дизассемблеры обычно дизассемблируют инструкции перехода только с числовым указанием пункта назначения и не помещают никаких маркеров в цель ветвления, чтобы помочь вам найти вершину цикла и т.д.

Он также указывает NOP более четко, чем другие дизассемблеры (чтобы было ясно, когда есть заполнение, а не дизассемблируется как просто еще одна инструкция.)

Это открытый исходный код, и его легко скомпилировать для Linux. Он может дизассемблироваться в синтаксис NASM, YASM, MASM или GNU (AT&T).

Пример вывода:

 ; Заполняющее пространство: 0FH
; Тип наполнителя: Многобайтовый NOP
; дБ 0FH, 1FH, 44H, 00H, 00H, 66H, 2EH, 0FH
; дБ 1FH, 84H, 00H, 00H, 00H, 00H, 00H
ВЫРАВНИВАТЬ 16
фу: ; Начало функции
        смр рди, 1 ; 00400620 _ 48:83. ФФ, 01
        jbe ?_026 ; 00400624 _ 0F 86, 00000084
        мов r11d, 1 ; 0040062A _ 41: ВВ, 00000001
?_020: движение r8, r11 ; 00400630 _ 4D: 89. Д8
        имул r8, r11 ; 00400633 _ 4D: 0F AF. С3
        добавить r8, rdi ; 00400637 _ 49:01. F8
        см r8, 3 ; 0040063А _ 49:83. F8, 03
        jbe ?_029 ; 0040063E _ 0F 86, 00000097
        мов эси, 1 ; 00400644 _ БЭ, 00000001
; Заполняющее пространство: 7H
; Тип наполнителя: Многобайтовый NOP
; дБ 0FH, 1FH, 80H, 00H, 00H, 00H, 00H
ВЫРАВНИВАТЬ 8
?_021: добавить rsi, rsi ; 00400650 _ 48:01. F6
        мов ракс, рси ; 00400653 _ 48:89. F0
        имул ракс, рси ; 00400656 _ 48: 0F AF. С6
        шл ракс, 2 ; 0040065А _ 48: С1. Е0, 02
        cmp r8, rax ; 0040065E _ 49:39. С0
        ИНЦ ?_021 ; 00400661 _ 73, ЭД
        lea rcx, [rsi+rsi] ; 00400663 _ 48:8Д.
0С 36 ...

Обратите внимание, что этот вывод готов к сборке обратно в объектный файл, поэтому вы можете настроить код на уровне исходного кода ассемблера, а не с помощью шестнадцатеричного редактора машинного кода. (Таким образом, вы не ограничены сохранением вещей одного размера.) Без изменений результат должен быть почти идентичным. Хотя может быть и нет, поскольку разборка таких вещей, как

 (из /lib/x86_64-linux-gnu/libc.so.6)
РАЗДЕЛ .plt align=16 выполнить ; секция №11, код
?_00001:; Локальная функция
        push qword [отн. ?_37996] ; 0001F420 _ ИФ. 35, 003A4BE2(отн.)
        jmp возле [rel ?_37997] ; 0001F426 _ ИФ. 25, 003A4BE4(отн.)
...
ВЫРАВНИВАТЬ 8
?_00002:jmp рядом с [rel ?_37998] ; 0001F430 _ ИФ. 25, 003A4BE2(отн.)
; Примечание. Непосредственный операнд может быть уменьшен за счет расширения знака.
        нажать 11 ; 0001F436 _ 68, 0000000B
; Примечание. Непосредственный операнд может быть уменьшен за счет расширения знака.
        пмп ?_00001 ; 0001F43B _ E9, FFFFFFFE0
 

не имеет ничего в исходном коде, чтобы убедиться, что он ассемблируется в более длинную кодировку, которая оставляет место для релокаций, чтобы перезаписать его с 32-битным смещением.


Если вы не хотите его устанавливать objconv, GNU binutils objdump -Mintel -d очень удобен и уже будет установлен, если у вас обычная установка Linux gcc.

linux — Как дизассемблировать необработанный 16-битный машинный код x86?

Если вы просто хотите, чтобы использовал дизассемблер , тогда objdump — один из вариантов. Дизассемблер, входящий в состав ассемблера nasm, называется ndisasm. Вы также можете запустить «debug.exe» в DOS Box на Linux, если у вас есть копия программы. Он также занимается разборкой, а также контролируемым исполнением; то есть моделирование самого ЦП, что также важно даже при разборке по причинам, которые я собираюсь описать.

Fake86 имеет эмулятор процессора. Вы можете заставить его выполнять дизассемблирование, (а) заставив его показывать инструкцию вместо ее симуляции, (б) заставляя его не выполнять условные переходы или вызывать вызовы, а (вместо этого) складывать адрес в качестве новой точки входа в выполнить дизассемблирование (т.

е., по сути, взять и ветвей и инкапсулировать подпрограммы), (c) заставить его остановить текущую дизассемблирование при безусловном переходе или возврате, (d) заставить его принять одну, две или более точек входа для запуска с и в идеале (e) заставить его также принимать базовые адреса для сегментов данных и (f) заставить его делать шестнадцатеричный дамп всех областей, необработанных как сегменты данных или кода (поскольку это обычно там, где косвенные переходы или вызовы или косвенно- сегменты данных, к которым осуществляется доступ.)

Это приводит к другому смыслу вашего запроса: «Я хочу, чтобы сделал дизассемблером». Исходный код для ndisasm доступен, и он обрабатывает многих потомков 8086, а не только сам 8086 (что сильно загромождает его, если вам нужен только дизассемблер 8086 или даже 80386), но он не самодостаточен и имеет сильная зависимость от остальной части дистрибутива.

Его основная идея заключается в том, что он использует восьмеричные цифры для кодов операций, что лучше подходит для 80×86, как я указал в USENET в 1995 в comp. lang.asm … и (фактически) создание nasm было прямым ответом на это. Таким образом, это потенциально более прозрачно, и вы можете захотеть держать исходный код под рукой для проверки и сравнения, если вы делаете свой собственный дизассемблер.

Вы также можете запустить программу debug.exe на самой себе.

Вы также можете попробовать запустить ndisasm в файле debug.exe; после удаления заголовка файла .EXE размером 0x200 байт, чтобы сделать его необработанным двоичным файлом, после извлечения из него адреса точки входа CS:IP и адреса указателя стека SS:SP (стеки 80×86 растут вниз, поэтому сегмент стека номинально от СС:0 до СС:(SP-1)). EXE для debug.exe не имеет перемещений, поэтому вы можете обрабатывать код как необработанный двоичный файл.

Но ничего четко узнаваемого вы не получите, так как программа является самомодифицирующейся, точнее: самораспаковывающейся. Вы получите (едва) сжатое изображение кода (коэффициент сжатия примерно 5/6), за которым следует процедура загрузки.

Вы должны запустить на нем эмуляцию, т.е. запустив debug.exe на debug.exe, чтобы эмулировать процедуру распаковки, чтобы заставить его извлекать себя, а затем вы выгружаете распакованный образ программы и дизассемблируете его. Там — это «таблица перемещений» в конце процедуры загрузки, так что действительно ли в есть релокации — просто они применяются, когда программа распаковывает себя, а не ОС при загрузке EXE-файла.

И затем вы только что дизассемблировали дизассемблер, который также выполняет эмуляцию процессора, как это делает Fake86, но только для 8086. Вам придется сделать абсолютные адреса относительными (используя исходную таблицу релокации в качестве руководства), сделать повторно сборки. Как только вы это сделаете, вы можете работать с источником. Таблица кодов операций находится в открытом виде (если вы отображаете ее в виде текста) — как в упакованной, так и в неупакованной версиях debug.exe.

На GitHub также есть DosDebug. Он обрабатывает все до «80586» (или Pentium) и «80686»: он помечает поколение «6» для некоторых инструкций; например, он обрабатывает условные операции «cmov», а также их плавающие «fcmov» точки.

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *