Instant Download Advanced Apple Debugging and Reverse Engineering Second Edition Derek Selander PDF All Chapters
Instant Download Advanced Apple Debugging and Reverse Engineering Second Edition Derek Selander PDF All Chapters
com
https://textbookfull.com/product/advanced-apple-debugging-
and-reverse-engineering-second-edition-derek-selander/
OR CLICK BUTTON
DOWNLOAD NOW
https://textbookfull.com/product/advanced-apple-debugging-reverse-
engineering-third-edition-derek-selander/
textboxfull.com
https://textbookfull.com/product/designed-by-apple-in-california-1st-
edition-apple/
textboxfull.com
https://textbookfull.com/product/bioinspiration-and-biomimicry-in-
chemistry-reverse-engineering-nature-1st-edition-gerhard-swiegers/
textboxfull.com
https://textbookfull.com/product/nginx-cookbook-advanced-recipes-for-
high-performance-load-balancing-1st-edition-derek-dejonghe/
textboxfull.com
NGINX Cookbook: Advanced Recipes for High-performance Load
Balancing 3rd Edition Derek Dejonghe
https://textbookfull.com/product/nginx-cookbook-advanced-recipes-for-
high-performance-load-balancing-3rd-edition-derek-dejonghe/
textboxfull.com
https://textbookfull.com/product/apple-watch-book-coll/
textboxfull.com
https://textbookfull.com/product/functional-reverse-engineering-of-
machine-tools-1st-edition-wasim-ahmed-khan-editor/
textboxfull.com
Notice of Rights
All rights reserved. No part of this book or corresponding materials (such as text,
images, or source code) may be reproduced or distributed by any means without prior
written permission of the copyright owner.
Notice of Liability
This book and all corresponding materials (such as source code) are provided on an “as
is” basis, without warranty of any kind, express of implied, including but not limited to
the warranties of merchantability, fitness for a particular purpose, and
noninfringement. In no event shall the authors or copyright holders be liable for any
claim, damages or other liability, whether in action of contract, tort or otherwise,
arising from, out of or in connection with the software or the use of other dealing in the
software.
Trademarks
All trademarks and registered trademarks appearing in this book are the property of
their own respective owners.
raywenderlich.com 2
Advanced Apple Debugging
Dedications
"I would like to thank my wife, Brittany, for all her love and support
while I silently wept in the fetal position trying to get this book out
the door"
— Derek Selander
raywenderlich.com 3
Advanced Apple Debugging
raywenderlich.com 4
Advanced Apple Debugging
raywenderlich.com 5
Advanced Apple Debugging
raywenderlich.com 6
Advanced Apple Debugging
raywenderlich.com 7
Advanced Apple Debugging
raywenderlich.com 8
Advanced Apple Debugging
raywenderlich.com 9
Advanced Apple Debugging
raywenderlich.com 10
Advanced Apple Debugging
raywenderlich.com 11
Advanced Apple Debugging
raywenderlich.com 12
Advanced Apple Debugging
raywenderlich.com 13
Advanced Apple Debugging
raywenderlich.com 14
I Introduction
Debugging has a rather bad reputation. I mean, if the developer had a complete
understanding of the program, there wouldn’t be any bugs and they wouldn’t be
debugging in the first place, right?
There are always going to be bugs in your software — or any software, for that matter.
No amount of test coverage imposed by your product manager is going to fix that. In
fact, viewing debugging as just a process of fixing something that’s broken is actually a
poisonous way of thinking that will mentally hinder your analytical abilities.
The same negative connotation can also be applied to reverse engineering software.
Images of masked hackers stealing bank accounts and credit cards may come to mind,
but for this book, reverse engineering really is just debugging without source code —
which in turn helps you gain a better understanding of a program or system.
There's nothing wrong with reverse engineering in itself. In fact if debugging was a
game, then reverse engineering is simply debugging on the “difficult” setting — which is
quite a fun setting if you’ve been playing the game for a while. :]
In this book, you'll come to realize debugging is an enjoyable process to help you better
understand software. Not only will you learn to find bugs faster, but you’ll also learn
how other developers have solved problems similar to yours. You'll also learn how to
create custom, powerful debugging scripts that will help you quickly find answers to
any item that piques your interest, whether it’s in your code — or someone else’s.
raywenderlich.com 15
Advanced Apple Debugging Introduction
• A Mac running High Sierra (10.13) or later. Earlier versions might work, but they're
untested.
• Xcode 9.1 or later. Packaged with Xcode is the latest and greatest version of LLDB,
the debugger you’ll use extensively throughout this book. At the time of this writing,
the version of LLDB packaged with Xcode is lldb-900.0.57.
• Python 2.7. LLDB uses Python 2.7 to run its Python scripts. Fortunately, Python 2.7
automatically ships with macOS, as well as with Xcode. You can verify you have the
correct version installed by typing python --version in Terminal.
• A 64 bit iOS device running iOS 10 or later, and a paid membership to the iOS
development program [optional]. For most chapters in the book, you can run any
iOS programs in the Simulator. However, you’ll get more out of this book by using a
64-bit iOS device to test out certain ideas or suggestions littered throughout the
book.
Once you have these items in place, you’ll be able to follow along with almost every
chapter in this book. For certain sections, you'll need to disable the Rootless security
feature in order to use some of the tools (i.e. DTrace). This is discussed in Chapter 1.
• Developers who want to take a deeper dive into internals of Swift and Objective-C
• Developers who are interested in understanding what they can do to their program
through reverse engineering
• Developers who want to be confident in finding answers to questions they have about
their computer or software
raywenderlich.com 16
Advanced Apple Debugging Introduction
This book is for intermediate to advanced developers who want to take their debugging
and code exploration game to the next level.
We’ve also set up an official forum for the book at forums.raywenderlich.com. This is a
great place to ask questions about the book, discuss debugging strategies or to submit
any errors you may find.
Book updates
Great news: since you purchased the PDF version of this book, you’ll receive free
updates of the book’s content!
The best way to receive update notifications is to sign up for our weekly newsletter. This
includes a list of the tutorials published on raywenderlich.com in the past week,
important news items such as book updates or new books, and a few of our favorite
developer links. Sign up here:
• www.raywenderlich.com/newsletter
https://github.com/DerekSelander/LLDB
These scripts will help aid in your debugging/reverse engineering sessions and provide
novel ideas for your own LLDB scripts.
raywenderlich.com 17
Advanced Apple Debugging Introduction
License
By purchasing Advanced Apple Debugging & Reverse Engineering, you have the following
license:
• You're allowed to use and/or modify the source code in Advanced Apple Debugging &
Reverse Engineering in as many applications as you want, with no attribution
required.
• You're allowed to use and/or modify all art, images, or designs that are included in
Advanced Apple Debugging & Reverse Engineering in as many applications as you
want, but must include this attribution line somewhere inside your game: “Artwork/
images/designs: from the Advanced Apple Debugging & Reverse Engineering book,
available at www.raywenderlich.com”.
• The source code included in Advanced Apple Debugging & Reverse Engineering is for
your own personal use only. You're NOT allowed to distribute or sell the source code
in Advanced Apple Debugging & Reverse Engineering without prior authorization.
• This book is for your own personal use only. You're NOT allowed to sell this book
without prior authorization, or distribute it to friends, co-workers, or students; they
must to purchase their own copy instead.
All materials provided with this book are provided on an “as is” basis, without warranty
of any kind, express or implied, including but not limited to the warranties of
merchantability, fitness for a particular purpose and noninfringement. In no event shall
the authors or copyright holders be liable for any claim, damages or other liability,
whether in an action of contract, tort or otherwise, arising from, out of or in connection
with the software or the use or other dealings in the software.
All trademarks and registered trademarks appearing in this guide are the property of
their respective owners.
raywenderlich.com 18
Advanced Apple Debugging Introduction
Acknowledgments
We would like to thank many people for their assistance in making this possible:
• Our families: For bearing with us in this crazy time as we worked all hours of the
night to get this book ready for publication!
Much like finding bugs in a program, stepping on one of these creatures really, really
sucks. Pain settles in (inflicted by either your product manager or the sea urchin) and
can last up to several hours, even though the issue may remain for an extended period
of time. In addition, just like bugs in a program, if you find one of these lovely creatures,
there are usually many more in close proximity!
raywenderlich.com 19
Section I: Beginning LLDB
Commands
This section will cover the basics of using LLDB, Apple’s software debugger. You’ll
explore an application named Signals, an Objective-C/Swift application that illustrates
how Unix signals can be processed within an application. You’ll learn some strategies to
find and create Swift syntax-style breakpoints as well as Objective-C style breakpoints.
By the end of this section, you’ll be able to wield the debugger to perform most of the
basic tasks needed for debugging, as well as create your own simple custom commands.
raywenderlich.com 20
1 Chapter 1: Getting Started
In this chapter, you’re going to get acquainted with LLDB and investigate the process of
introspecting and debugging a program. You’ll start off by introspecting a program you
didn’t even write — Xcode!
You’ll take a whirlwind tour of a debugging session using LLDB and discover the
amazing changes you can make to a program you’ve absolutely zero source code for.
This first chapter heavily favors doing over learning, so a lot of the concepts and deep
dives into certain LLDB functionality will be saved for later chapters.
raywenderlich.com 21
Advanced Apple Debugging Chapter 1: Getting Started
The feature blocking your introspection and debugging attempts is System Integrity
Protection, also known as Rootless. This system restricts what programs can do —
even if they have root access — to stop malware from planting itself deep inside your
system.
Since this book involves debugging not only your own applications, but any application
you’re curious about, it’s important that you to remove this feature while you learn
about debugging so you can inspect any application of your choosing.
If you currently have Rootless enabled, you’ll be unable to attach to the majority of
Apple’s programs. There are exceptions however, such as any apps shipped on the iOS
Simulator.
Open up a Terminal window and look for the Finder process, like so:
lldb -n Finder
raywenderlich.com 22
Advanced Apple Debugging Chapter 1: Getting Started
Disabling Rootless
To disable Rootless, perform the following steps:
2. When the screen turns blank, hold down Command + R until the Apple boot logo
appears. This will put your computer into Recovery Mode.
3. Now, find the Utilities menu from the top and then select Terminal.
Note: A safer way to follow along with this book would be to create a dedicated
virtual machine using VMWare or VirtualBox and only disable Rootless on this.
You can verify if you’ve successfully disabled Rootless by trying the same command in
Terminal again once you log into your account.
lldb -n Finder
LLDB should now attach itself to the current Finder process. The output of a successful
attach should look like this:
After verifying a successful attach, detach LLDB by either killing the Terminal window,
or typing quit and confirming in the LLDB console.
raywenderlich.com 23
Advanced Apple Debugging Chapter 1: Getting Started
Open a new Terminal window. Next, edit the Terminal tab’s title by pressing ⌘ + Shift +
I. A new popup window will appear. Edit the Tab Title to be LLDB.
Next, make sure Xcode isn’t running, or you’ll end up with multiple running instances
of Xcode, which could cause confusion.
lldb
Create a new Terminal tab by pressing ⌘ + T. Edit the tab’s title again using ⌘ + Shift +
I and name the tab Xcode stderr. This Terminal tab will contain all output when you
print content from the debugger.
Make sure you are on the Xcode stderr Terminal tab and type the following:
~ $ tty
raywenderlich.com 24
Advanced Apple Debugging Chapter 1: Getting Started
/dev/ttys027
Don’t worry if yours is different; I’d be surprised if it wasn’t. Think of this as the
address to your Terminal session.
To illustrate what you’ll do with the Xcode stderr tab, create yet another tab and type
the following into it:
Be sure to replace your Terminal path with your unique one obtained from the tty
command.
Now switch back to the Xcode stderr tab. The words hello debugger should have
popped up. You’ll use the same trick to pipe the output of Xcode’s stderr to this tab.
Finally, close the third, unnamed tab and navigate back to the LLDB tab.
To summarize: You should now have two Terminal tabs: a tab named "LLDB", which
contains an instance of LLDB running, and another tab named "Xcode stderr", which
contains the tty command you performed earlier.
Note: If you are using a prerelease version of Xcode, then the name and path of
Xcode could be different.
You can check the path of the Xcode you are currently running by launching Xcode
and typing the following in Terminal:
$ ps -ef `pgrep -x Xcode`
Once you have the path of Xcode, use that new path instead.
Now launch the Xcode process from LLDB, replacing /dev/ttys027 with your Xcode
stderr tab’s tty address again:
raywenderlich.com 25
Advanced Apple Debugging Chapter 1: Getting Started
The launch argument e specifies the location of stderr. Common logging functionality,
such as Objective-C’s NSLog or Swift’s print function, outputs to stderr — yes, not
stdout! You will print your own logging to stderr later.
Xcode will launch after a moment. Switch over to Xcode and click File ▸ New ▸
Project.... Next, select iOS ▸ Application ▸ Single View Application and click Next.
Name the product Hello Debugger. Make sure to select Swift as the programming
language and deselect any options for Unit or UI tests. Click Next and save the project
wherever you wish.
You now have a new Xcode project. Arrange the windows so you can see both Terminal
and Xcode.
Note: You might notice some output on the Xcode stderr Terminal window; this is
due to content logged by the authors of Xcode via NSLog or another stderr console
printing function.
raywenderlich.com 26
Advanced Apple Debugging Chapter 1: Getting Started
These large codebase migrations do not sit well in enterprise environments where
frameworks with different dependencies have to play nicely with each other. If one
framework containing Swift code has breaking changes, it can bring down a whole
codebase. Then imagine if hundreds of frameworks contained Swift; it would be a
dependency hell to migrate each framework without breaking the many different repos
that depend upon on these frameworks.
However, things are a changin’ at Apple. Apple is now more aggressively adopting Swift
in their own applications such as the iOS Simulator... and even Xcode!
You can query this information yourself by typing the following into LLDB:
This will dump out all the dynamically loaded modules Xcode has loaded into the
process that contain or link to Swift code.
This is using Python along with LLDB’s Python module (confusingly also called "lldb").
You’ll get very accustomed to working with this module in section IV of this book as
you learn to build custom, advanced LLDB scripts.
From this list of dynamic Swift libraries, one is a particular module of interest:
IDEPegasusSourceEditor. This is a dynamic library (just like UIKit or Foundation) that
contains some interesting Swift classes pertaining to the code editing views in Xcode.
Note: Apple frequently uses code names for internal development features. For
example, an iPad’s picture-on-picture feature is commonly referred to as
“Medusa” in internal methods — and no, not all Apple code names are Greek code
names. So, what’s up with this Pegasus name? There’s often specific reasoning to
the Apple development team (or manager/s?) assigning these names. Your guess is
as good as mine, but I can see a logical connection between a mythological
creature that symbolizes wisdom and the visual display to your source code.
raywenderlich.com 27
Advanced Apple Debugging Chapter 1: Getting Started
While debugging, knowledge of the Cocoa SDK can be extremely helpful. For example, -
[NSView hitTest:] is a useful Objective-C method that returns the class responsible for
the handled click or gesture for an event in the run loop. This method will first be
triggered on the containing NSView and recursively drill into the furthest subview that
handles this touch. You can use this knowledge of the Cocoa SDK to help determine the
class of the view you’ve clicked on.
In your LLDB tab, type Ctrl + C to pause the debugger. From there, type:
This is your first breakpoint of many to come. You’ll learn the details of how to create,
modify, and delete breakpoints in Chapter 4, “Stopping in Code”, but for now simply
know you’ve created a breakpoint on -[NSView hitTest:].
(lldb) continue
Click anywhere in the Xcode window (or in some cases even moving your cursor over
Xcode will do the same); Xcode will instantly pause and LLDB will indicate a breakpoint
has been hit.
The hitTest: breakpoint has fired. You can inspect which view was hit by inspecting
the RDI CPU register. Print it out in LLDB:
(lldb) po $rdi
This command instructs LLDB to print out the contents of the object at the memory
address referenced by what’s stored in the RDI assembly register.
raywenderlich.com 28
Advanced Apple Debugging Chapter 1: Getting Started
Note: Wondering why the command is po? po stands for print object. There’s also p,
which simply prints the contents of RDI. po is usually more useful as it gives the
NSObject’s description or debugDescription methods, if available.
Assembly is an important skill to learn if you want to take your debugging to the next
level. It will give you insight into Apple’s code — even when you don’t have any source
code to read from. It will give you a greater appreciation of how the Swift compiler team
danced in and out of Objective-C with Swift, and it will give you a greater appreciation
of how everything works on your Apple devices.You will learn more about registers and
assembly in Chapter 10, “Assembly Register Calling Convention”.
For now, simply know the $rdi register in the above LLDB command contains the
instance of the subclass NSView the hitTest: method was called upon.
Note the output will produce different results depending on where you clicked and what
version of Xcode you’re using. It could give a private class specific to Xcode, or it could
give you a public class belonging to Cocoa.
(lldb) continue
Instead of continuing, Xcode will likely hit another breakpoint for hitTest: and pause
exection. This is due to the fact that the hitTest: method is recursively calling this
method for all subviews contained within the parent view that was clicked. You can
inspect the contents of this breakpoint, but this will soon become tedious since there
are so many views that make up Xcode.
As of Xcode 9, the class responsible for visually displaying your code in the Xcode IDE is
a private Swift class belonging to the IDEPegasusSourceEditor module, named
SourceCodeEditorView. This class acts as the visual coordinator to hand off all your
code to other private classes to help compile and create your applications.
Let’s say you want to break only when you click an instance of NSView. You can modify
the existing breakpoint to stop only on a NSView click by using breakpoint conditions.
raywenderlich.com 29
Exploring the Variety of Random
Documents with Different Content
The only too notable quarrel of the Ancients and Moderns
produced some deservedly famous literature of the critical kind in
England, but its greatest result in that way, The Battle of the Books,
will be best noticed, together with its author’s other works, and in
the order rather of its own publication than of its composition. Nor
Temple. need the earlier protagonists, Temple and Bentley,
occupy us much; though the latter will give an
opportunity of paying at least respects to a kind of Criticism of which
we have perforce said little. Temple, a charming writer, and the
author, at the close of his critical Essay on Poetry, of one of the most
exquisite sentences in English, is simply a critic pour rire. The
hundred pages of his Works[529] which are devoted to literature,
invited the exercise of Macaulay’s favourite methods by the enormity
of their ignorance, the complacency of their dogmatism, and the
blandness of their superficiality. Temple has glimmerings—he
intimates pretty plainly some contempt of at least the French “rules”;
but he will still be talking of what he has given himself hardly the
slightest pains to know.
This could not be said of Bentley, and the Phalaris Dissertation has
been not undeservedly ranked as one of the representative pieces of
Bentley. critical literature. It is only unfortunate that Bentley
has meddled so little with the purely literary side of
the matter; and the sense of this misfortune may be tempered by
remembrance of his dealings with Milton. He is, however, perfectly
right in at least hinting[530] that the Pseudo-Phalaris might have been
convicted on literary counts, as well as on linguistic and
chronological, and that, on grounds of style, the theory of those
half-sceptics who attributed the Letters to Lucian was almost worse
than the error of the true believers. That Lucian could have written a
line of this skimble-skamble stuff is simply impossible; and it must
always remain an instance of the slight sense of style possessed by
the Humanists that a really great man of letters, like Politian, should
have given countenance to the absurdity.
From any point of critical consideration Collier’s famous book[531]
must be a most important document in the History of Criticism; and
though from some such points it may be of even greater importance
Collier’s than it is to us, we can in no wise omit it. For it is
Short View. probably the earliest instance in our history where a
piece of criticism has apparently changed, to a very great extent, the
face of an important department of literature, and has really had no
small part in bringing about this change. It is, however, indirectly
rather than directly that it concerns us; for it is only here and there
that Collier takes the literary way of attack, and in that way he is not
always, though he is sometimes, happy. Curiously enough, one of his
felicities in this kind has been imputed to him for foolishness by his
great panegyrist. It is not necessary to feel that sympathy with his
opinions on ecclesiastical and political affairs which Macaulay
naturally disclaimed, and which some others may cheerfully avow, in
order to see that the Tory critic was quite right, and the Whig critic
quite wrong, in regard to the dissertations on the Greek and Latin
Drama. What may be thought of their technical scholarship does not
matter. But Macaulay’s undoubted familiarity with the classics must
have had a gap in it, and his wide knowledge of modern literature
several much greater gaps, if he did not know—first, that Collier had
ancient criticism on his side, and secondly, that the allegation of
ancient authority and practice where favourable, the arguing-off of it
where inconvenient, were exactly the things to influence his
generation. When everybody was looking back on the Vossian
precept, “Imitate the Ancients, but imitate them only in what is
good,” and drawing forward to the Popian axiom,
“To copy Nature is to copy them,”
484. The chief critical loci in Milton are all among the best known
passages of his work. They are the peremptory anathema on rhyme
in the prose note added to Paradise Lost, in what Professor Masson
has settled to be the “Fifth Form of the First Edition”; the short
Defence of Tragedy, wholly on Italian principles but adapted to
Puritan understandings, prefixed to Samson Agonistes; the first
description of his own studies in The Reason of Church Government;
the more elaborate return upon that subject—a singular mixture of
exquisite phrasing and literary appreciation with insolent abuse—in
the Apology for Smectymnuus (which is not, as some have thought,
the same thing as The [Platonic] Apology) and divers clauses in the
Tractate of Education, especially the reference to “Castelvetro, Tasso,
and Mazzoni,” whom he credits with “sublime art,” and puts on a
level with Aristotle and Horace. We might add a few casual girds,
such as that at the supposed cacophony of Hall’s “Teach each” in the
Apology for Smectymnuus, which has been compared to Malherbe’s
vellications of Desportes (cf. sup., p. 245). A complete critical
treatise from him (if only he could have been prevailed upon to write
in a good temper) would have been of supreme interest: it is not so
certain that it would have been of supreme value, even if he had
been in that temper.
487. This Boojum, I fear, will disturb some of my friends. But I put
him under the protection of the Powder of Pimperlimpimp, and of
the Equinoctials of Queubus.
490. Lest the last note should lead any one to think that I wish to
make inept and ignoble game of Davenant, let me observe that he
can write admirable things, worthy a son, in double sense, of
Oxford. Could anything be happier than this of Spenser: “His noble
and most artful hands”? The mere selection of the epithets is good,
the combination of them famously so.
497. Preface to Miscellanies, ii.; Scott, ed. cit., xii. 295; Ker, i. 263.
I wish that Dryden were alive for many reasons: not least because
he would certainly pay the debt that he owes to my friend Mr Ker
magnificentissime. No one has vindicated him better against the
half-witted blunderers. But I am not quite so much inclined as even
Mr Ker is to father his critical style on Chapelain and La Mesnardière,
Sarrasin and Scudéry, or on Corneille himself. It is not till Saint-
Evremond, perhaps even till Fénelon, that I can find in French the
indescribable omne tulit punctum as in him. And both, are his
inferiors.
502. Here, to glance at the matter of Dryden and the Spaniards (v.
sup., p. 332, and inf., on Spence), is a possible reminiscence of
Lope’s Arte Nuevo, 178-180—
506. Lesser, but far from negligible; for the Character of Saint-
Evremond is both personally and critically interesting, and the critical
biographies of Lucian and Plutarch lead straight to Johnson.
508. Chapelain might like the early romances (v. supra, p. 260).
But here Boileau was the spokesman of France.
509. They have deceived the very elect, e.g., M. Rigault, who in
not altogether unnatural amazement at the dictum, “Spenser wanted
only to have read the rules of Bossu,” classes (Q. des A. et des M., p.
311) Dryden as an ancien enragé. But M. Rigault is at a wrong angle
in most of the English part of his book,—so much so as to strike a
chill into any one who has to criticise a foreign literature, lest,
lacking the grace of the Muses, he too go astray.
511. The fact is that the two are parts of the same book; and that
a second edition of the first appeared in 1692, just before the first of
the second next year.
512. Vol. ii. pp. 107-130 of the 1706 edition of Rapin in English. At
p. 113 Rymer says that he will not here examine the various qualities
which make English fit above all other languages for Heroic Poesy,
“the world expecting these matters learnedly and largely discussed
in a particular treatise on that subject.” This apparently important
announcement is marginally annotated “Sheringham.” I suppose this
was Robert S., a Norfolk man (as his name imports), of Caius
College, and Proctor at Cambridge just before the Commonwealth
ejection. He is described (see Dict. Nat. Biog.) as an “excellent
linguist,” but seems to have been more of an antiquary than of a
man of letters. As the D. N. B. says nothing of any such work as
Rymer glances at, I suppose the world was disappointed of it by his
sudden death in May 1678, four years after Rymer wrote.
522. History of the Royal Society, 4to, London, 1667, p. 111 sq. It
may be found conveniently extracted at vol. iii. pp. 271, 272 of Sir
Henry Craik’s English Prose Selections (London, 1894).
528. This is the odder, and the more discreditable, because one of
the few things to be counted to Langbaine for righteousness is a
distinct admiration of Shakespeare.
529. Ed. 1757, vol. iii., pp. 394-501, containing the Poetry, the
Ancient and Modern Learning, and the Thoughts upon Reviewing
that Essay. Some have charitably found in Temple better knowledge
of the Moderns, whom he scorned, than of the Ancients, whom he
championed, on the strength of his references to “Runes” and
“Gothic Dithyrambics.” I cannot be so amiable. It is all a mere
parade of pretentious sciolism varnished by style.
532. Essays upon Several Moral Subjects (3rd ed., 2 vols., London,
1698). Nor can one make out an entirely good case (though
something may be done) for Collier in the matter of that description
of Shakespeare, which Mr Browning has maliciously chosen, as a
motto for Ferishtah’s Fancies, from the Historical Dictionary: “His
genius was jocular, but, when disposed, he could be very serious.”
But the baser folk go on from this—and all but the very noblest have
some difficulty in preventing themselves from going on—to think
that a man should not write
544. It may be said that this was later. But Prior was a man of
thirty-six in 1700.
545. Yet it is not for the twentieth century to throw stones at the
seventeenth, till we leave off laying down rules of our own
manufacture for still earlier ages, and reproving Marlowe and the
youthful Shakespeare for being “too lyrical” in tragedy.
548. P. 325.
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
textbookfull.com